hibernate:LazyInitializationException使用netbeans和JSF
我正在使用netbeans 7.1、glassfish 3.1.1和hibernate 4.01 我正在使用netbeans生成的JSF文件 -Facade.java -Controller.java 还有我自己的实体豆 在我的基本票证实体中,我映射了以下内容hibernate:LazyInitializationException使用netbeans和JSF,hibernate,jsf,netbeans,lazy-loading,Hibernate,Jsf,Netbeans,Lazy Loading,我正在使用netbeans 7.1、glassfish 3.1.1和hibernate 4.01 我正在使用netbeans生成的JSF文件 -Facade.java -Controller.java 还有我自己的实体豆 在我的基本票证实体中,我映射了以下内容 @OneToMany(mappedBy=“baseTicket”,cascade=javax.persistence.CascadeType.ALL) @Fetch(值=FetchMode.SUBSELECT) java.util.Lis
@OneToMany(mappedBy=“baseTicket”,cascade=javax.persistence.CascadeType.ALL)
@Fetch(值=FetchMode.SUBSELECT)
java.util.List自定义属性;
如果我添加fetch=EAGER
注释,我就能够从JSF网页访问customAttributes。然而,如果我把它作为延迟加载,我会得到
hibernate: LazyInitializationException
我在网上搜索并尝试了许多建议,但我无法让它发挥作用。
我曾尝试创建实体管理器,但似乎无法成功创建em
最好的解决方案是什么?如果您不想急切地加载它,您可以编写一个命名查询来获取DAO层中的列表 注释样式:
@NamedQueries({
@NamedQuery(
name = "findCustomAttributes",
query = "from CustomAttribute ca where ca.ticket = :ticketId"
)
})
这里我假设CustomAttribute中有到Ticket(@ManyToOne
)实体的链接
在代码中,您可以按如下方式获取结果:
Query query=em.createNamedQuery("findCustomAttributes");
query.setParameter("ticketId", 1);
List CustomAttributesList=query.getResultList();
您可以根据需要使用此列表,唯一的问题是您需要知道当前的票证id
更多信息,您可以从
感谢您的回复-问题是我似乎无法在实体本身中获得对实体管理器的有效引用。@anthonys您不需要在dao bean的实体中使用实体管理器。参考本文,了解分层体系结构的一些基本知识,也可以参考本文,了解更多知识。只需在代码中检查他们现在是如何获取实体的,并适当地修复它,它必须在DAO层中。