キャッシングと休止に関する多くの質問がありましたが、私の問題の解決策を見つけることはできませんでした。ほとんどの質問はJPAを使わずに直接hibernateを使って参照します。休止状態キャッシングを無効にする
JPAプロバイダとして設定されたHibernateでSpringを使用しています。アプリケーション自体は、JSFを使用するWebアプリケーションです。基になるデータベースはSQL Server 2008です。
JPA仕様では、persistence.xml
に以下を追加しました。
<shared-cache-mode>NONE</shared-cache-mode>
Hibernateは多かれ少なかれ無視しているようです。 Hibernate documentationは、これによって第2レベルのキャッシュが無効になることを示しています。しかし、私たちのアプリケーションでは、3番目のアプリケーションが終了するたびに一部のデータが変更されるため、データベースからの最新のデータが必要になります。
キャッシングを無効にするにはどうすればよいですか?
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager em;
...
return em.createQuery("SELECT mt FROM " + MyTable.class.getSimpleName() + " mt",
MyTable.class).getResultList();
私がアプリケーションを起動し、テーブルを照会しているブラウザでページを読み込む@axtavt :私たちは、のようなクエリでデータにJPAの道を得ています。 私は自分のDBMSに切り替えて、テーブルの更新を行います。 2番目のブラウザを開いても、古いデータが表示され、更新されたデータは表示されません。
更新 さらにテストを実行しました。私はEXTENDED
と@PersistenceContext
を使っていました。私はここにそれを加えた。しかし、それを取り除いても問題はありません。
何が問題なのですか?なぜHibernateはその設定を無視すると思いますか? – axtavt
_Hibernateが多かれ少なかれそれを無視するように見えることを明確にしてください:問題の例を挙げてください。第2レベルのキャッシュを有効にすることに加えて、エンティティとクエリをキャッシュ可能に設定して機能させる必要があるため、第2レベルのキャッシュはここでは問題にならないはずです。第2レベルのキャッシュについての非常に良い記事が見つかりました[ここ](http://www.javalobby.org/java/forums/t48846.html) – tscho
@axtavtメインのポストにアップデートを追加しました。 –