はここにあります:のJava EE 6 + Hibernateは遅延ロード例外
javax.servlet.ServletException: org.hibernate.LazyInitializationException:it.trew:怠惰な役割の コレクションを初期化に失敗しました
:.model.TipoCaratteristica.traduzioni、何 セッションまたはセッションが@Entity @Table(name = "tipi_caratteristiche") public class TipoCaratteristica implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; private String nome; @OneToMany(cascade = CascadeType.ALL) @JoinTable( name = "tipi_caratteristiche_traduzioni", joinColumns = { @JoinColumn(name = "tipo_caratteristica_id") }, inverseJoinColumns = { @JoinColumn(name = "traduzione_id") } ) private List<Traduzione> traduzioni = new ArrayList<Traduzione>();
私のエンティティのコードの一部を閉鎖しませんでした
"Traduzione"は、一対のStringプロパティを持つシンプルなプレーンエンティティです。
私はidで "TipoCaratteristica"を読み込み、そのリストをタグに表示しようとする "編集" jsfページを持っています。
私が編集されたオブジェクトの取得のためのejb-ファサードのメソッドを使用します。
TipoCaratteristica tc = ejbFacade.find(Long.valueOf(value));
私はその例外について何かを読んで:JSFバッキングBeanで、その後
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
を。実際には、 "traduzioni"コレクションの取り込みタイプEAGERを設定すると修正されますが、私はしたくありません。 トランザクションですべてをやっていることや、Hibernate.initialize()を使っていることについて読んだことがありますが、その方法は分かりません。
お願いします。
あなたは、EJBファサードの基本パラメータ化されたクラスと、すべてのエンティティのこのEJBファサードの1つのサブクラスを持っているようです。上記のオーバーライドされたメソッドは、TipoCaratteristicaエンティティのEJBファサードに存在する必要があります。私の前提が間違っている場合は、コードを投稿してください。 –
私はinitialize()がEJBメソッド内で行われなければならないことを覚えておかなければならないのですか? –
トランザクション内でセッションがまだ開いている場所で実行する必要があります。セッションが終了したら、それと同じことを行うと、明らかに同じ遅延ロード例外が発生します。 –