2012-04-17 12 views
0
@PersistenceContext(unitName = "ServerLayerPU") 
    protected EntityManager m_entityManager; 

    m_entityManager.persist(entity); 
    m_entityManager.flush(); 

新しいエンティティオブジェクトをdbにコミットされたものと同期させようとしています。私はもともと問題を解決したと思っていましたが、より大きなテストの間に問題が再現されました。このエンティティがdbにコミットされると、別のテーブル/エンティティに影響を与えるトリガが発生し、これを反映させる必要があります。これについてどうすればいいですか?hibernateが自分のデータベースと同期していません

答えて

0

データベーストリガーがレコードの状態を変更すると、これらの変更は休止状態セッションの対応するインスタンスに反映されません。session.refresh()を使用して、これらのインスタンスを基になるデータベースの最新値で更新する必要があります。

1

flush()は、管理エンティティに対して行われたすべての変更を検出し、それらをデータベースに送信するようにエンティティマネージャに指示します。トランザクションをコミットしたり、データベースからデータを再読み込みすることはありません。 (Hibernateは再読み込みするデータをどのように知っていますか?トリガーが挿入したデータを変更した場合に備えて、すべてを再読み込みするとは思いませんか?

refresh()でエンティティを読み直すことができます。

+0

トリックをリフレッシュします。私はこの種の同期を管理する適切な方法が何であるか迷っています。私は、エンティティオブジェクトに最新の情報があることを保証するために、リフレッシュステートメントを使用してコードを散らばっています。 – skinnybrit51

関連する問題