JBoss7.1 経由で JSF2、JPA2、EJB3 を使用して Web アプリケーションを開発しています。子エンティティ (トピック) のリストを含むエンティティ (フォーラム) があります。初めてフォーラムIDでトピックのリストを取得しようとしたとき、データはDBからロードされています。
List<Topic> topics = entityManager.find(Forum.class, 1).getTopics();
その後、いくつかの子エンティティ (トピック) をフォーラムに追加し、再びフォーラム ID でトピックのリストを取得しようとしています。Nut 私は古いキャッシュされた結果のみを取得しています。新しく挿入された子レコードが DB からロードされていません。
次のメソッドを使用して、子エンティティ (トピック) を読み込むことができます。
Method1: entityManager.find() の前に entityManager.clear() を呼び出す
Method2:使用
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() メソッドを作成して、キャッシュの代わりに DB からデータをロードする方法を知りたいですか?
PS: Extended Persistence Context タイプを使用しています。
@PersistenceContext(unitName="forum", type=PersistenceContextType.EXTENDED)
protected EntityManager em;