まず、Java EE、EntityManagerおよびPrimeFacesでのHibernateを使用します。
1つのEJBモジュール(ビジネスロジックとドメイン)と2つのWARモジュール(JerseyWSとJSFPrimeFaces)があります。
遅延初期化の例外を回避するために、JSFWARモジュールで遅延コレクションを初期化することにしました。拡張エンティティマネージャーは使用しません。
@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)
...
わかりません。初期化の1行前にデータベースからフェッチされたときにセッションが必要ですよね。同様の方法でWSモジュールの属性を初期化し、そこで機能しています。
何が起こっているのか分かりますか?