質問

EclipselinkとJPAでSpring MVC 3.0を使用していますが、次の問題が発生しています。アプリにこのフィールドがあります。

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

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

役に立ちましたか?

解決

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

見る、http://en.wikibooks.org/wiki/java_persistence/relationships#object_corruption.2c_one_fide_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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top