私が直面している実際の問題は、キャッシュの内容に関係なくeclipselinkを強制的に更新できることです。現在、eclipselinkは、新しい更新プログラムがキャッシュ内の値と同じ値を持つ場合、新しい更新ステートメントを作成しません。永続性のxmlでリフレッシュ・プロパティー( )を使用したくありません。eclipselinkセッター更新のヒント
キャッシュ内の値を使用しないように更新するエンティティを指定できるソリューションを探しています。
EntityManager em=getEntityManager();
EntityTransaction t = em.getTransaction();
t.begin();
Ticket ticket = get(ticketId);
if(ticket == null) {
return null;
}
ticket.setState(status);
em.persist(ticket);
t.commit();
私はSQLクエリに上記の更新(SETSTATE方法を)変更する場合は、クエリオブジェクトは、我々はsetHint(QueryHints.CACHE_USAGE、CacheUsage.DoNotCheckCache)を挙げることができるsetHintを行うためのオプションがあります。私はこのような更新がたくさんあるので、これを行うことはできません。
上記のスニペットでは、セッターメソッドを使用して更新が行われていますが、このシナリオではキャッシュを無視するヒントをどのように指定しますか?または、セッターオブジェクトを使用して強制更新を行う他の方法はありますか?
My problem is similar to this : http://www.eclipse.org/forums/index.php/m/660750/
ありがとうございます。
うん、私は今、存続の呼び出しを削除しました。同じ値のセットで更新したいのは、異なるソースから状態フィールドを操作する可能性があるからです。このシナリオでは、アプリケーションから状態フィールドも更新する必要があります。現時点では、eclipselinkキャッシュは直接的な変更を認識していないため、発生しません。ダミーのカウンターを使用する例を教えてください。 – user1096318
@ Nizet、エンティティに新しいカウンタを追加し、テーブルの新しい列を追加することをお勧めしましたか?エンティティを変更する以外の方法がありますか? – user1096318
EntityManager em = getEntityManager(); \t \t EntityTransaction t = em.getTransaction(); \t \t \t \t t.begin(); \t \t \t \tチケットticket = get(ticketId); \t \t em。リフレッシュ(チケット); \t \t \t \t場合(チケット== NULL){ \t \t \t戻りヌル。 \t \t} \t \t \t \t ticket.setState(ステータス)。 \t \t \t \t \t \t t.commit(); \t \t返品チケット; \t \t \t \t em.refresh(チケット)を追加するとすぐに動作します。 em.refresh(エンティティ)を使用することに不利な点はありますか? \t \tヒント/プロパティを使用して毎回新しい更新を確実に行う方法はありますか? – user1096318