0

eclipselinkとjpaでSpringMVC3.0を使用していますが、次の問題が発生しています。アプリにこのフィールドがあります。

@OneToMany(mappedBy = "stadium")
private Set<FootballMatch> footballMatches = new HashSet<FootballMatch>();

を介して新しいアイテムをセットに追加するアクションがトリガーされるSet.add()と、データベースに新しい行がありますが、変更はブラウザに表示されません。ブラウザのキャッシュをクリアしても何も起こりません。新しい値を強制的に読み込む方法は、1行を変更しなくても、アプリを再デプロイすることです。そのため、アプリは古い値を返し、どこかにキャッシュします。常に更新された値をロードするように強制するにはどうすればよいですか?のようなことを考えていたのですgetLastModified()が、どこに実装すればいいのかわかりません。

4

1 に答える 1

2

これは双方向の関係であるため、関係の両側を設定していることを確認してください。

http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Object_corruption.2C_one_side_of_the_relationship_is_not_updated_after_updating_the_other_sideを参照してください 。

また、正しいオブジェクトを変更、マージ、コミットしていることを確認してください。

EntityManager.refresh()を使用してオブジェクトを更新してみてください。更新された値を取得しますか?そうでない場合、データベースにはデータがありません。

アプリケーションにEntityManagerをキャッシュしていますか?古いEntityManagerがある場合、新しい変更は表示されません。通常、新しいEntityManagerはリクエスト/トランザクションごとに作成する必要があります。

EclipseLinkはデフォルトでオブジェクトキャッシュを維持します。これは、persistence.xmlプロパティ "eclipselink.caching.shared"="false"を使用して無効にできます。

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Cachingを参照して ください。

于 2010-09-21T13:33:51.420 に答える