当我使用session.lock时,无法锁定未保存的瞬态实例

时间:2016-04-26 12:34:03

标签: java hibernate

以下是我的代码和平

 public ATMRecord store(ATMRecord atmRecord) {
    Session session = HibernateUtility.getSession();
    try {
        Transaction tx = HibernateUtility.beginTransaction(session);
        logger.info("saving an ATMRecord[" + atmRecord + "]");
        try {

            session.lock(atmRecord, LockMode.UPGRADE);
            session.merge(atmRecord);
        } catch (Throwable e) {
                            e.prinstacktrace());
            return null;
        }
        HibernateUtility.commitTransaction(tx, session);
        return record;
    } finally {
        HibernateUtility.closeSession(session);
    }

当我尝试保存ATMRecord对象时,我面临异常 org.hibernate.TransientObjectException:无法锁定未保存的瞬态实例。 ATMRecord是简单的pojo对象,表示一行(未在当前代码中序列化实现)。没有与此相关的连接或复杂映射。 我怎样才能克服上述问题。 提前谢谢..

1 个答案:

答案 0 :(得分:0)

你不能。 lock()调用将锁定数据库中的行。你试图锁定一个瞬态对象,这意味着Hibernate甚至不知道对象是否数据库中的相应行。