これは古典的な問題ですが、何とかこの問題の解決方法を理解できません。ハンドラメソッドのコントローラのどこかにJSP内のオブジェクトのOneToManyリストにアクセスする際のLazyInitializationException EL
@OneToMany(cascade=CascadeType.ALL, mappedBy = "a")
public Set<B> getBList() {
return this.bList;
}
、私は
のようなものを持っている: は、だから私は2つのエンティティ、AとB 次のメソッドを持っているAIでの間にOneToManyの関係を持っています
@RequestMapping("/")
public String method(Model model){
A a = aDAO.findById(1);
for(B b : a.getBList()){
System.out.println(b);
}
model.addAttribute("a",a);
}
と私は、次のELを持つJSPページ内:
${a.bList}
ハンドラメソッドでは、すべて正常に動作し、Aオブジェクトが持つBオブジェクトのリストがコンソールに正しく表示されます。
しかし、JSPページのレンダリング時に、LazyInitializationExceptionが表示されます。
org.hibernate.LazyInitializationExceptionを:com.entities.A.bList、無セッションまたはセッション:なまけ役割のコレクションを初期化に失敗しました
この例外は通常、Aが取得されたセッションが終了しているので、私が間違っている場合は表示されます(私が間違っている場合は正しく表示されます)。 しかし、DAOクラスのfindById(Long id)メソッドではセッションを閉じません。 そして、それがハンドラーメソッドでの印刷が機能する理由だと思います。しかし、なぜELによって例外が生じるのでしょうか?セッションはJSPページの解釈で閉じられますか?
また、ELでリストにアクセスできるようにするにはどうすればよいですか?
[Solveはロールのコレクションを遅延して初期化できませんでした]の重複の可能性があります。(http://stackoverflow.com/questions/11746499/solve-failed-to-lazily-initialize-a-collection-of-role -exception) –
あなたのDAOのfindByIdメソッドに@Transactional属性を置きましたか? –
はい、@ JekinKalariya、それは働いた。ありがとうございました。私はこの注釈が実際に何をしているのかを調べます。 –