私は私のDALに今JPA - EntityGraphとHibernateのL2キャッシュ(ehcacheを)
@Cacheable
@Entity
@NamedEntityGraph(
name = "Parent.Child",
attributeNodes = {
@NamedAttributeNode("children"),
}
)
public class Parent {
private Set<Child> children;
// getter - setter
}
以下のように定義1対多の関係を持って、私は
@Override
public Parent getParentWithChildren(int id) {
EntityGraph<?> graph = entityManager.getEntityGraph("Parent.Child");
Map<String, Object> props = new HashMap<>();
props.put("javax.persistence.fetchgraph", graph);
return entityManager.find(Parent.class, id, props);
}
このメソッドを呼び出しています私はParentにChildrenをロードしているので、子供のコレクションはトランザクション外で使用できるはずです。しかし、私はレイジー初期化の例外を得ています。これは、hibernate level 2 cache-ehcacheが有効な場合にのみ発生します。私は設定からそれを無効にすると、期待どおりに動作します。また、の後にコレクションを明示的に初期化すると、が見つかると、期待通りに動作します。バグですか?私はJPA 2.1でHibernate 5.2.6.Finalを使用しています。
編集:私は気づいたもう一つは、その問題が休止状態&キャッシュプロバイダと関連していなければならないので、エンティティは、初めての罰金ロードということでした。
同様の状況が発生します。私はL2キャッシュを使用しません。エンティティがすでに永続コンテキストにある場合、fetchgraphヒントを持つ次のem.findはデータベースから何もロードしません。それはバグとしても私には思われます。 – srnjak
セッションキャッシュについても同じことが起こると思います。これは確認されたバグであり、5.2.10で解決されたとマークされています – user2578525