我定義如下JPA - EntityGraph和Hibernate的L2 Cache(ehcache的)
@Cacheable
@Entity
@NamedEntityGraph(
name = "Parent.Child",
attributeNodes = {
@NamedAttributeNode("children"),
}
)
public class Parent {
private Set<Child> children;
// getter - setter
}
現在在我的DAL一個一對多的關係,我調用此方法
@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);
}
由於我已經加載了父母與子女,我應該可以使用子女收集交易之外。但我得到懶惰初始化異常。只有在啓用休眠級別2緩存 - ehcache時纔會發生這種情況。如果我從配置中禁用它,它按預期工作。此外,如果我找到後明確初始化收集,它按預期工作。那麼這是一個錯誤?我正在使用Hibernate 5.2.6.Final和JPA 2.1。
編輯:我還注意到的一件事是,實體首次加載罰款,所以這個問題必須與休眠&緩存提供程序有關。
我遇到類似的情況。我不使用二級緩存。我意識到,如果實體已經在持久化上下文中,那麼使用fetchgraph提示的下一個em.find不會加載數據庫中的任何內容。在我看來,這也是bug。 – srnjak
我認爲會話緩存也是如此。這是一個確認的錯誤,它被標記爲在5.2.10 – user2578525