2

複数のユーザーがいます。同時実行を防ぐために、次のように書きます。

@EJB
PersistenceManagerRemote persistenceManager;

persistenceManager.lock(decidableEntity, LockModeType.READ);
persistenceManager.refresh(decidableEntity);

これは私のために働いた。ただし、何かを永続化してから、同じトランザクションでこのコードを呼び出すと、エラーが発生します。

 javax.persistence.PersistenceException: org.hibernate.HibernateException: this instance does not yet exist as a row in the database

エンティティを永続化すると、トランザクションが完了するまでデータベース コンテキストは影響を受けません。そのため、更新すると、データベースでエンティティを見つけようとするため、エラーが発生します。解決策はありますか?2回に分けてのお取引はできません。並行性も考慮する必要があります。私に何ができる?

4

1 に答える 1

4

em.flush()保留中のすべての変更をデータベースに書き込むために呼び出す必要があります。persist()永続コンテキストにアタッチされた一時的なエンティティのみを作成します。Hibernate は必要な場合にのみフラッシュします。そうでない場合はフラッシュを回避し、バッチに送信できるようにします。

于 2012-01-16T13:31:02.607 に答える