0

データベース用のこの OneToMany 列を含む User という名前のエンティティ クラスがあります。

  @Setter
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    @JoinTable(
        name = "USER_CARS",
        joinColumns = @JoinColumn(name="USER_ID", referencedColumnName = "id"),
        inverseJoinColumns = @JoinColumn(name="CAR_ID", referencedColumnName = "id")
    )
    private List<Car> cars;

ユーザーをデータベースに挿入すると、すべてが正常に機能し、ユーザーの車も user_cars テーブルに追加されます。車を取得すると、次の例外が発生します。

Method threw 'org.hibernate.LazyInitializationException' exception.

他の回答を検索しましたが、解決方法が見つかりませんでした。これは、ユーザーを取得しようとしている方法です。

public T findById(Long id) {
    em = emf.createEntityManager();
    em.getTransaction().begin();

    T et = (T) em.find(entityClass, id);

    em.getTransaction().commit();
    em.close();

    return et;
}

何が問題で、どうすれば修正できますか? バックグラウンドで何が起こっているのか理解できません。

4

1 に答える 1

1

例外メッセージに基づいて、List車のコンテンツを取得しているようですが、EntityManagerセッションは既に閉じられています。使用できるコレクションのデフォルトの遅延初期化ではなく

@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.EAGER)
于 2014-06-02T12:08:08.333 に答える