1

一部の jboss 設定で EntityManager を使用してキャッシングを無効にすることは可能ですか?

説明します。休止状態を介して EntityManager を使用している製品の最終的な「耳」(このようなもの、私はこれの初心者) があり、いくつかの動作をテストする必要があります。私にとって簡単な方法は、エンティティの状態をデータベースで直接変更 (削除、作成) することです。しかし、これを行った後、アプリケーションはしばらくの間古い値を見つけるために残ります。エンティティマネージャーに使用される jboss キャッシュについて読みました。

したがって、テストのために、EntityManagerキャッシュを無効にしたいのですが、アプリケーションレベルでは無効にできず、jbossレベルでのみ無効にできます。

簡単に言うと、他のアプリケーションと一緒にデータベースで編集できるため、実際のエンティティの状態を常にリロードするアプリケーションが必要です。また、アプリケーション レベル (hibernate.xml など) でキャッシュを無効にすることは不可能です。

PS: jboss 4.2.3、ejb3、hibernate3

4

1 に答える 1

1

あなたが参照しているキャッシュは、おそらくPersistenceContext. 無効にすることはできません。その範囲を微調整することしかできません。Java EE 環境では、永続化コンテキストのスコープはデフォルトでトランザクションです。したがって、いくつかの変更をすぐに有効にする必要がある場合は、これらの変更 (問題のエンティティのフェッチを含む) を別のメソッドに抽出し、新しいトランザクションを要求するように注釈を付けることができます。

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

メソッドが戻ると、すべての変更がコミットされます。

Bean 管理のトランザクションを使用することもできるため、コミットを自分で制御できます。このために、Bean に注釈を付けて@TransactionManagement( TransactionManagementType.BEAN )使用しますUserTransaction

@Resource
private UserTransaction tx;
...
tx.begin();
//do stuff
tx.commit();
于 2012-11-23T15:00:22.080 に答える