JBoss 5.1.0 GAをHibernateと一緒に使用しており、現在、第2レベルのキャッシュを有効にしようとしています。Hibernate構成に次のプロパティを追加しました。
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.MultiplexedJBossCacheRegionFactory"/>
<property name="hibernate.cache.jbc2.query.localonly" value="true"/>
<property name="hibernate.cache.region_prefix" value="my_prefix" />
そして、私はめったに変更しないと予想するエンティティに次のように注釈を付けました。
@Cache(usage=CacheConcurrencyStrategy.TRANSACTIONAL)
これは、ドキュメントの私の理解に基づいています。
アプリケーションは、恐ろしいメッセージ(ログストリームのWARNまたはERRORメッセージなど)なしで正常にデプロイされます。しばらくの間、キャッシュが機能していることを確認します(これを確認するために、Hibernate統計を使用しています)が、しばらくすると、フォームのスタックトレースを取得します(リモートアクセスがまったくないシングルユーザーとしてログオンした場合でも):
「トランザクションはMYCLASSを新たに作成しようとしました。このトランザクションが開始されてから、別の(おそらくリモートの)トランザクションによってすでに作成されています。同時作成イベントがあります。」
次の形式の巨大なスタックトレースが続きます。これは、最終的に私が作成した名前付きクエリにまでさかのぼります。
SELECT x FROM X WHERE x.deleted = false
名前付きクエリには、キャッシュ用の追加のアノテーションはありません。
この問題を解決する方法についてのアドバイスをいただければ幸いです。