2012-11-21 12 views
12

हाइबरनेट मेरी पंक्ति को हटा नहीं करता है:हाइबरनेट HQL साथ हटा सकते हैं और

public boolean deleteVote(Login user, int pid){ 

     Session session = getSession(); 

     try{ 
      String hql = "delete from Vote where uid= :uid AND pid= :pid"; 
      Query query = session.createQuery(hql); 
      System.out.println(user.getUid() + " and pid: " + pid); 
      query.setString("uid", user.getUid()); 
      query.setInteger("pid", pid); 
      System.out.println(query.executeUpdate()); 
     }catch(Exception e){ 

Outprint:

uid: 123 and pid: 1 
Hibernate: delete from votes where uid=? and pid=? 
1 

एसक्यूएल सिंटेक्स जब मैं एसक्यूएल में सीधे कोशिश कर रहा हूँ काम कर रहा है। प्रत्यक्ष एसक्यूएल सिंटेक्स:

delete from votes where uid= '123' AND pid= 1 

मैपिंग:

<class name="package.model.Vote" table="votes"> 
    <id name="vid" column="vid" > 
    <generator class="increment"/> 
</id> 
<property name="pid" column="pid" /> 
<property name="uid" column="uid" /> 
<property name="tid" column="tid" /> 
<property name="votes" column="votes" /> 
</class> 

तालिका:

CREATE TABLE IF NOT EXISTS `votes` (
    `vid` int(11) NOT NULL 
    `pid` int(11) NOT NULL, 
    `uid` varchar(20) NOT NULL, 
    `tid` int(11) NOT NULL, 
    `votes` int(11) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`vid`), 
    KEY `pcid` (`pid`,`uid`), 
    KEY `uid` (`uid`), 
    KEY `tid` (`tid`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ; 

ALTER TABLE `votes` 
ADD CONSTRAINT `votes_ibfk_3` FOREIGN KEY (`pid`) REFERENCES `poll` (`pid`) ON DELETE CASCADE ON UPDATE CASCADE, 
ADD CONSTRAINT `votes_ibfk_4` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON  UPDATE CASCADE, 
ADD CONSTRAINT `votes_ibfk_5` FOREIGN KEY (`tid`) REFERENCES `teams` (`tid`) ON DELETE CASCADE ON UPDATE CASCADE; 

INSERT INTO `votes` (`vid`, `pid`, `uid`, `tid`, `votes`) VALUES 
(20, 1, '123', 1, 1); 

मुझे लगता है कि यह कुछ बहुत आसान है क्योंकि सब कुछ अब तक मेरे लिए ठीक लग रहा है है। मुझे कोई त्रुटि या कुछ और नहीं मिला, बस कोई हटाना नहीं हो रहा है।

किसी भी मदद की सराहना की जाती है।

+0

आप कैसे जानते हैं कि यह हटाया नहीं गया है? क्या आपने डेटाबेस में चेक किया था या आपने एप्लिकेशन में एक और सवाल किया था? – fiso

+0

डेटाबेस में सीधे जांच की गई – user1671980

+0

क्या आपके लिए सम्मिलित कार्य करता है? क्या आपके पास लेनदेन कहीं भी कॉन्फ़िगर किया गया है? –

उत्तर

28

आपको लेनदेन शुरू करने और प्रतिबद्ध करने की आवश्यकता है।

Transaction transaction = session.beginTransaction(); 
try { 
    // your code 
    String hql = "delete from Vote where uid= :uid AND pid= :pid"; 
    Query query = session.createQuery(hql); 
    System.out.println(user.getUid() + " and pid: " + pid); 
    query.setString("uid", user.getUid()); 
    query.setInteger("pid", pid); 
    System.out.println(query.executeUpdate()); 
    // your code end 

    transaction.commit(); 
} catch (Throwable t) { 
    transaction.rollback(); 
    throw t; 
} 

यह भी संभव है कि डेटाबेस में परिवर्तन दिखाई देने से पहले सत्र को बंद करने की आवश्यकता हो।

1

आउटपुट से आप

uid: 123 and pid: 1 
Hibernate: delete from votes where uid=? and pid=? 
1 

प्रदान की यह स्पष्ट है कि query.executeUpdate() 1. लौटने विधि रिटर्न अद्यतन या नष्ट कर दिया संस्थाओं की संख्या। इसका मतलब है कि 1 पंक्ति को अद्यतन या हटा दिया गया है, जो ठीक है।

सत्र से ऑब्जेक्ट को निकालने के लिए सत्र को फ़्लश करने के लिए session.flush() या session.evict() करने का प्रयास करें।

1

entityManager.createQuery ("तालिका नाम से हटाएं")। ExecuteUpdate();

संबंधित मुद्दे