1

これが私が立ち往生しているところです:

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」は、文字列プロパティのペアを持つ単純なプレーンエンティティです。

「TipoCaratteristica」をIDでロードし、そのリストをタグで表示しようとする「編集」jsfページがあります。

編集されたオブジェクトをフェッチするためにejb-facadeメソッドを使用します。

public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

次に、jsfバッキングBeanで:

TipoCaratteristica tc = ejbFacade.find(Long.valueOf(value));

私はその例外について何かを読みました。実際、「traduzioni」コレクションにフェッチタイプEAGERを設定すると修正されますが、修正したくありません。トランザクションですべてを実行すること、またはHibernate.initialize()を使用することについて読みましたが、その方法がわかりません。

手伝ってくれませんか。

4

2 に答える 2

2
@Override
public TipoCaratteristica find(Object id) {
    TipoCaratteristica result = super.find(id);
    Hibernate.initialize(result.getTraduzioni());
    return result;
}

または、を使用する代わりに、em.find()すべてをロードするクエリを使用すると、単一のクエリになります。

select distinct tc from TipoCaratteristica 
left join fetch tc.traduzioni
where tc.id = :id
于 2012-05-14T08:38:53.717 に答える
2

PersistentContext.EXTENDEDこれは、エンティティマネージャの属性を使用して解決できます。

例:

@PersistentContext(type=PersistentContext.EXTENDED)
private EntityManager em; 

または新しいバージョン:

@PersistentContext(type=PersistentContextType.EXTENDED)
private EntityManager em; 

このエラーは、すべてのトランザクションについてエンティティマネージャートランザクションが閉じられているために発生します。この属性はこれを回避し、エンティティマネージャーを引き続き使用できるようにします。ダン・アレンのSeam in Actionの本を読んで詳細を読むことができます、彼はこの問題を詳細に説明しています。

于 2012-06-28T21:17:14.847 に答える