私は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)
。これはdocumentationの私の理解に基づいています。
アプリケーションは、正常に見えるメッセージ(ログストリームにWARNやERRORメッセージなど)を入れずに正常に展開されます。短い時間の間、私は(これを見るためにHibernateの統計を使っています)キャッシュが動作しているのを見ていますが、フォームのスタックトレースを取得した後も(たとえリモートアクセスのない単一のユーザとしてログオンしていても)
は、「トランザクションは、新たに MYCLASSを作成しようとしました。このトランザクション は、別の(おそらくリモート) トランザクションによって、開始以来、すでに が作成されています。我々は、同時 作成イベントを持っている」
を最終的に名前に戻る巨大なスタックトレースに続いて
SELECT x FROM X WHERE x.deleted = false
名前付きクエリには、キャッシングに関する追加の注釈はありません。
この問題の解決方法についてアドバイスをいただければ幸いです。
確かにそれは助けになるだろうが、私はキャッシュのロックと分離の設定を試してみるだろう。 – Stas
これは役に立ちました - mvcc-entityではなくpessimistic-entityを使用しました。 –