首先,我使用 Java EE、带有 EntityManager 和 PrimeFaces 的 Hibernate。
我有一个 EJB 模块(业务逻辑和域)和两个 WAR 模块(Jersey WS 和 JSF PrimeFaces)。
我决定在 JSF WAR 模块中初始化惰性集合以避免惰性初始化异常。我不使用扩展实体管理器。
@ManagedBean(name = "company")
@SessionScoped
public class CompanyBean {
@EJB
private CompanyFacade cf;
...
public String showDetails(Long id) {
company = cf.find(id);
Hibernate.initialize(company.getCompanyTypes());
Hibernate.initialize(company.getPrimaryUser());
Hibernate.initialize(company.getBlocked());
Hibernate.initialize(company.getAddresses());
Hibernate.initialize(company.getContacts());
return "DETAILS";
}
...
}
我得到:
Caused by: org.hibernate.HibernateException: collection is not associated with any session
at org.hibernate.collection.AbstractPersistentCollection.forceInitialization(AbstractPersistentCollection.java:474)
at org.hibernate.Hibernate.initialize(Hibernate.java:417)
at minepackage.CompanyBean.showDetails(CompanyBean.java:79)
...
我不明白。当初始化之前的一行从数据库中获取时,必须有一个会话,不是吗?我以类似的方式初始化 WS 模块中的属性并且它在那里工作。
知道发生了什么吗?