gpt4 book ai didi

java - 当尝试删除同一事务中的锁定实体时,EntityManager 抛出 OptimisticLockException

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:40 28 4
gpt4 key购买 nike

这是我的代码:



EntityManager em = JPAUtil.createEntityManager();

try {

EntityTransaction tx = em.getTransaction();

try {

//do some stuff here
tx.begin();
List es = em.createNamedQuery("getMyEntities", MyEntity.class).getResultList();

for (MyEntity e : es) {
em.lock(e, LockModeType.OPTIMISTIC);
}

if (es.size() != 0) {

em.remove(es.get(0));

}

tx.commit

} finally {

if (tx.isActive()) {
tx.rollback();
}

}

} finally {

em.close();

}

当我执行该代码时,我得到:

...


..........
Caused by: javax.persistence.OptimisticLockException: Newer version [null] of entity [[MyEntity#63]] found in database
at org.hibernate.ejb.AbstractEntityManagerImpl.wrapLockException(AbstractEntityManagerImpl.java:1427)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1324)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:80)
... 23 more

谁能解释一下这是为什么?

最佳答案

我假设您在数据库中已有一些条目后添加了带有 @Version 注释的列,以便为已经存在的记录创建一些空值。现在 hibernate 无法比较版本。

我会尝试将所有空版本化实体的版本列设置为 1。

关于java - 当尝试删除同一事务中的锁定实体时,EntityManager 抛出 OptimisticLockException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14455202/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com