Hibernate HQL delete with and
hibernate, hql, hql-delete
Solution
You need to begin and commit a transaction.
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;
}
It is also possible that you need to close the session before the changes will be visible in the database.
Problem
Hibernate doesn't delete my row: ``` 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 ``` The SQL Syntax is working when I'm trying directly in SQL. Direct SQL Syntax: ``` delete from votes where uid= '123' AND pid= 1 ``` Mapping: ``` <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> ``` Table: ``` 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); ``` I guess it's something pretty easy because everything looks okay for me so far. I got no error or anything else, just that no delete is happening. Any help is appreciated.