JPA如何知道何时必须抛出OptimisticLockException? [英] How JPA knows when it have to throw OptimisticLockException?

查看:100
本文介绍了JPA如何知道何时必须抛出OptimisticLockException?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想确认以下内容:

public void test() {

   SomeEntity se = em.find(SomeEntity.class, 1);

   // Do something...

   se.setField = "test";

}

JPA将仅对se执行乐观检查.

Here JPA will perform only optimistic check on se.

下一步:

public void test() {

   SomeEntity se = em.find(SomeEntity.class, 1);
   SomeOtherEntity soe = em.find(SomeOtherEntity.class, 1);
   em.lock(soe, LockModeType.OPTIMISTIC);

   // Do something...

   se.setField = "test";

}

如果自上次读取以来更改了sesoe(数据库中的版本增加),则JPA将引发OptimisticException.

Here JPA will throw OptimisticException if se OR soe have been changed (version incremented in database) since last read.

是真的吗?

推荐答案

OptimisticLockException 仅在事务提交到您调用em.flush()的数据库时才抛出-然后,JPA Provider将比较版本字段和数字知道它被另一个转蛋白改变了.

OptimisticLockException will be throw only when transaction commits to database ore you call em.flush() - then JPA Provider will compare version field and figure out that it was changed by another transactoin.

这篇关于JPA如何知道何时必须抛出OptimisticLockException?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆