我正在使用netbeans 7.1,glassfish 3.1.1和hibernate 4.01 我正在使用netbeans生成的JSF文件 - Facade.java - Controller.java 和我自己的实体豆
在我的baseTicket实体中,我映射了以下内容
@OneToMany(mappedBy = "baseTicket", cascade = javax.persistence.CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
java.util.List<CustomAttribute> customAttributes;
如果我添加fetch=EAGER
注释,我可以从JSF网页访问customAttributes。但是,如果我把它作为延迟加载,我得到
hibernate: LazyInitializationException
我在网上搜索并尝试了很多建议 - 但我无法让它发挥作用。 我尝试过创建一个实体管理器,但我似乎无法成功创建它。
什么是最佳解决方案?
答案 0 :(得分:0)
如果您不想急切加载它,可以编写一个命名查询来获取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。
您可以从
获取更多信息