1

私はHibernateを初めて使用するので、Criteriaでこの種のことをどのように行うかを知りたいです。

私には3つのクラスA、B、Cがあります。クラスAにはクラスBとの@ OneToManyの関連付けがあり、クラスBにはクラスCとの@ManyToOneの関連付けがあります。

クラスAのオブジェクトが必要なときにすべての情報を取得して、A.Bを繰り返し処理してから、bcにアクセスできるようにする、Criteriaを使用したリクエストを作成したいと思います。

現時点では、Bのみを取得するクエリがあります。

session.createCriteria(A.class)
.add(Restrictions.idEq(aId))
.setFetchMode("B", FetchMode.JOIN)
.uniqueResult();

ご協力ありがとうございました

編集:私はそれを試しました:

session.createCriteria(A.class)
.add(Restrictions.idEq(aId))
.createCriteria("Bs")
.createCriteria("C")
.uniqueResult();

しかし、それはこのエラーで終わりました:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
4

1 に答える 1

1

解決策を見つけました:

session.createCriteria(A.class)
.add(Restrictions.idEq(aId))
.setFetchMode("Bs", FetchMode.JOIN)
.setFetchMode("Bs.c", FetchMode.JOIN)
.uniqueResult();

「Bs」は @OneToMany アソシエーションを含む A の属性であり、「c」は @ManyToOne アソシエーションのコンテナ B の属性です。

于 2013-01-21T20:35:00.793 に答える