hibernate:使用netbeans和JSF的LazyInitializationException

时间:2012-03-22 11:31:04

标签: hibernate jsf netbeans lazy-loading

我正在使用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

我在网上搜索并尝试了很多建议 - 但我无法让它发挥作用。 我尝试过创建一个实体管理器,但我似乎无法成功创建它。

什么是最佳解决方案?

1 个答案:

答案 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。

您可以从

获取更多信息
  1. JEE6 Docs
  2. Hibernate JPA Docs