Jpa 悲观主义者的奇怪行为?
我是JPA2.0锁定新手,所以可能是我遗漏了一些东西 使用NetBeans,我尝试调试一个无状态会话Bean。我尝试在两个线程之间切换以检查概念:Jpa 悲观主义者的奇怪行为?,jpa,jakarta-ee,ejb-3.0,jpa-2.0,Jpa,Jakarta Ee,Ejb 3.0,Jpa 2.0,我是JPA2.0锁定新手,所以可能是我遗漏了一些东西 使用NetBeans,我尝试调试一个无状态会话Bean。我尝试在两个线程之间切换以检查概念: em.lock(entity, LockModeType.PESSIMISTIC_WRITE); em.persist(entity); try { em.flush(); } catch (Exception e) { System.out.println("Already Locked
em.lock(entity, LockModeType.PESSIMISTIC_WRITE);
em.persist(entity);
try {
em.flush();
} catch (Exception e) {
System.out.println("Already Locked!");
}
我让第一个过程结束
em.flush()
(没有例外)。然后,我切换到第二个过程。令人惊讶的是,在第一行之后暂停,仅在第一个进程退出函数之后才继续
注意:使用LockModeType.OPTIMISTIC时,一切正常
这是正常的行为吗?我错过什么了吗?它的行为方式似乎有所不同
谢谢
丹尼这是完全正常的行为。锁在事务提交/回滚时被释放,调用em.flush()时不会发生这种情况。这是完全正常的行为。锁在事务提交/回滚中被释放,调用em.flush()后不会发生这种情况.因此,在这种情况下,提交/回滚仅在函数终止后发生?如果这是事务的边界所在。因此,在这种情况下,提交/回滚仅在函数终止后发生?如果这是事务的边界所在。