JSF2、JPA2、EJB3をJBoss7.1経由で使ってWebアプリケーションを開発しています。 私は子エンティティ(トピック)のリストを含むエンティティ(フォーラム)を持っています。 forumIdでトピックのリストを初めて取得しようとしましたが、データはDBからロードされています。JPA2(JBoss7.1のHibernate)entityManager.find()がDBからではなく、キャッシュからデータを取得しています
List<Topic> topics = entityManager.find(Forum.class, 1).getTopics();
その後、私はフォーラムに少数のエンティティ(トピック)を追加してからフォーラムアイデアでトピックのリストを取得しようとしています。ナット私は古いキャッシュされた結果のみを取得しています。新しく挿入された子レコードはDBからロードされていません。
私は、次の方法を使用して子実体(トピック)をロードすることができています:
方法1:
を使用して:はentityManager.find()方法2前entityManager.clear()を呼び出します
em.createQuery("select t from Topic t where t.forum.forumId=?1", Topic.class);
または
em.createQuery("SELECT t FROM Topic t JOIN t.forum f WHERE f.forumId = ?1", Topic.class);
NamedQueriesでQueryHintsを設定しています。しかし、em.find()メソッドはすべてのDAO(ステートレスEJB)によって拡張されているスーパーCrudServiceにあります。だから、QueryHintsの設定は私にとってはうまくいかないでしょう。
私はem.find()メソッドをCacheの代わりにDBからロードする方法を知りたいのですが?
PS:私はExtended Persistence Contextタイプを使用しています。
@PersistenceContext(unitName="forum", type=PersistenceContextType.EXTENDED)
protected EntityManager em;
2次キャッシュを持っていますか?フォーラムとトピックのエンティティのコードと、新しいトピックをフォーラムに追加するためのコードを表示します。 –