残念ながら、コードで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をスローできますが、メソッドtest()ではfindのみを使用し、何も更新しませんが、コミットする前にエンティティを変更しますか?