2011-12-27 5 views
2

私は私のエンタープライズ・アプリケーションのJPAを使用している、と私は私のデータベーステーブルに行の値を変更する場合、関連するエンティティが(find(-)でそれを得る)新しい値で更新されません。JavaのJPA - 同期データベースとエンティティ

エンティティとデータベースまたはシンプルなキャッシュの間に同期の問題があると思いますが、どのように解決できますか?

+1

DBでは値が変更されていますか?あなたは質問を精緻化すべきです - あなたが何をしているかの例を挙げてください。 – viktor

+0

値が手動でデータベースに直接変更されました。 JPAクラスからfindを実行すると古いデータが取得されます。 – CeccoCQ

答えて

2

あなたはJPAを使用していないデータベースの行を編集する場合は、パラメータとしてfind(-)によってフェッチエンティティを使用してEntityManager#refresh(-)を呼び出すか、EntityManager#clear(-)を起動し、再度find(-)を呼び出す必要があります。

+0

私は試して正しく動作しましたが、クエリごとに "更新"を呼び出さないようにする方法がありますか? – CeccoCQ

+0

まあ、単純な解決策はありません。 JPAコンテキストの外でデータベースを更新しているため、JPAは変更の内容を知らないため、それは悪いことです。キャッシングなしでは、リクエストごとにデータベースにヒットします。ここでは、[L1キャッシュ](http://en.wikibooks.org/wiki/Java_Persistence/Caching#1st_Level_Cache)に関する詳細な情報を見つけることができます。 JPAプロバイダのドキュメントを読んで、L1キャッシュを無効にするプロパティが定義されていないかどうかを確認することもできます。 –

+0

ありがとう、ありがとう。正しく動作します。 – CeccoCQ

関連する問題