我的hibernate事务遇到了问题。执行后,表中没有值,根本没有更新。我所有其他更新都能正常运行。
这是映射
<class name="LastDownloadedMessage" table="t_imap_lastmsguid">
<id name="id" column="id" ><generator class="increment"/></id>
<property name="lastDownloadedMessageUid"><column name="last_msg_uid" /></property>
<property name="lastUidNext"><column name="next_msg_uid" /></property>
<property name="folder"><column name="folder_name" /></property>
<property name="cred"><column name="credential" /></property>
</class>
这是POJO对象:
public class LastDownloadedMessage {
Integer id;
private String lastDownloadedMessageUid;
private String lastUidNext;
private String folder;
private String cred;
//GETTERS AND SETTERS HERE
public LastDownloadedMessage() {
super();
}
public LastDownloadedMessage(String lastDownloadedMessageUid,
String lastUidNext) {
super();
this.lastDownloadedMessageUid = lastDownloadedMessageUid;
this.lastUidNext = lastUidNext;
}
}
这是正在进行更新的功能。
Session ssn=HibernateSessionFactory.openSession();
Transaction txn = ssn.beginTransaction();
Query query = ssn.createQuery("update LastDownloadedMessage e set e.lastDownloadedMessageUid = :luid , e.lastUidNext = :nextUid where e.folder =:folder and e.cred = :cred");
query.setParameter("luid",last_downloaded_msg_uid);
query.setParameter("nextUid", uid_next);
query.setParameter("folder", folder);
query.setParameter("cred", credential);
int result = query.executeUpate();
txn.commit();
ssn.flush();
ssn.close();
该功能似乎正确执行且没有错误。可能是什么问题?
答案 0 :(得分:1)
根据评论,在我看来,你在UPDATE与INSERT混淆。
如果result
为零,则表示您的WHERE子句与任何内容都不匹配,因此无需更新。
另外,为什么要尝试在已知(映射)的实体上发出UPDATE / INSERT?您所要做的就是在对象上设置值(LastDownloadedMessage),然后在EntityManager上执行persist
。浏览网页EntityManager.persist
。