不幸的是,我的代码中出现了 OptimisticLockException,我不知道为什么。也许有人可以帮助我回答一般问题。
以下场景:
@Entity
public class MyEntity {
@Id
@GeneratedValue
private Integer id;
@Version
private int version;
private String value;
}
@Singleton
@TransactionManagement(TransactionManagementType.CONTAINER)
public class MyBean {
@PersistenceContext
private EntityManager em;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void test() {
MyEntity myEntity = em.find(MyEntity.class, 1);
}
}
使用 CMT。方法 test() 需要一个新事务。
现在我的问题是:如果另一个 bean 中的另一个线程使用相同的持久性上下文在提交之前更改了我的实体,那么方法 test() 是否可以抛出 OptimisticLockException,尽管我只使用 find 并且不更新我的方法 test() 中的任何内容?