Hibernate:表没有更新

时间:2013-08-14 10:46:26

标签: java hibernate

我的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();

该功能似乎正确执行且没有错误。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

根据评论,在我看来,你在UPDATE与INSERT混淆。 如果result为零,则表示您的WHERE子句与任何内容都不匹配,因此无需更新。

另外,为什么要尝试在已知(映射)的实体上发出UPDATE / INSERT?您所要做的就是在对象上设置值(LastDownloadedMessage),然后在EntityManager上执行persist。浏览网页EntityManager.persist