スプリングMVC 3.0キャッシング
-
04-10-2019 - |
質問
EclipselinkとJPAでSpring MVC 3.0を使用していますが、次の問題が発生しています。アプリにこのフィールドがあります。
@OneToMany(mappedBy = "stadium")
private Set<FootballMatch> footballMatches = new HashSet<FootballMatch>();
新しいアイテムを介してセットに追加するアクションがトリガーされたとき Set.add()
, 、変更はブラウザには表示されませんが、データベースに新しい行があることがあります。ブラウザのキャッシュをクリアすると、何も起こりません。新しい値を強制する方法は、シングルラインを変更しなくても、アプリを再配置する方法であることを発見しました。そのため、アプリは古い値を返し、どこかにキャッシュしています。更新された値を常にロードするように強制するにはどうすればよいですか?私はようなものを考えていました getLastModified()
, 、しかし、どこで実装すべきかわかりません。
解決
それは双方向の関係であるため、関係の両側を設定していることを確認してください。
また、適切なオブジェクトを変更し、合併していることを確認してください。
entityManager.refresh()を使用してオブジェクトを更新してみてください。更新された値を取得しますか?そうでない場合、データベースにはデータがありません。
アプリケーションでEntityManagerをキャッシュしていますか?その周りに古いEntityManagerがある場合、新しい変更は見られません。通常、リクエスト/トランザクションごとに新しいEntityManagerを作成する必要があります。
eclipselinkはデフォルトでオブジェクトキャッシュを維持します。これは、persistence.xmlプロパティ「eclipselink.caching.shared」= "false"を使用して無効にすることができます。