私は非常に基本的な点を欠場する恐れがありますが、私は現時点で立ち往生しています。エンティティからのコレクションを遅延ロード中の例外
JSF用のハンドラとして機能するセッションスコープのCDIコンポーネントがあります(私はセッションスコープのCDIコンポーネントをJSFのハンドラとして提供しています) 2.0ビュー。これは、エンティティ・マネージャ、オブジェクトのリストと特別単一のオブジェクトを保持している:
@Named
@SessionScoped
public class EventHandler implements Serializable {
@PersistenceContext
private EntityManager em;
private List<MyEvent> events;
private MyEvent currentEvent;
...
ビュー表を表示するためのリストを要求すると、それはデータベースを照会することによって、リストを埋める:
Query query = em.createQuery("select e from MyEvent e");
events = (ArrayList<MyEvent>) query.getResultList();
ビューは、データテーブルでこれを示しており、ハンドラ内のアクションメソッドへのリンクを提供する:
<h:dataTable value="#{eventHandler.events}" var="_var">
...
<h:commandLink action="#{eventHandler.linkAction(_var)}"> ... </h:commandLink>
アクションメソッドが参照を格納:
収集および上記文献で使用されるエンティティ内public void setCurrentEvent(MyEvent currentEvent) {
this.currentEvent = currentEvent;
...
、デフォルトでレイジーにロードされるthere'a関係:今
@ManyToMany(mappedBy="supportedServices")
public Set<MyEntity> getSupportingEntities() {
...
、詳細ビューにあるとすることにより、この関係にアクセスしようとしたとき
#{eventHandler.currentEvent.supportingEntities...}
セッションがクローズされていることを通知するorg.hibernate.LazyInitializationExceptionが表示されます。
2番目のビューの後の時点でハンドラが要求された関係をロードできない場合、ハンドラがセッションスコープでクエリを介して参照をロードする必要がありますか?
感謝を。しかし、type = PersistenceContextType.EXTENDEDもemに再度マージしても、仕事をしなかったし、マッピングのeager fetchingを使うことは問題になりません。しかし、私は、アクションハンドラでcurrentEventを設定しながら関係に触れると、動作することがわかりました。それでも、後でエンティティの一部を読み込めない理由を理解できません。 –
まだ別の説明が見つかりませんでしたので、私はあなたの答えを受け入れます。 –