4

私の問題は私にはかなり簡単に思えますが、うまくいく答えが見つからないようです。デフォルトで遅延フェッチされる、別のエンティティとの ManyToMany 関連付けを持つ Hibernate エンティティがあります。ManyToMany アソシエーションが熱心にロードされたエンティティを返す基準を作成したいと考えています。

問題のエンティティは次のとおりです (無関係な部分は削除されています)。

@Entity
public class Order {

  @ManyToMany
  private List<Item> items;

  @ManyToMany
  private List<Discount> discountEntries;

  ...

}

これまでの私の注目すべき試みと結果は次のとおりです。

Criteria criteria = getSession().createCriteria(Order.class)
                                .setFetchMode("items", FetchMode.SELECT)
                                .setFetchMode("discountEntries", FetchMode.SELECT);
criteria.list();

- アイテムを遅延ロードします

Criteria criteria = getSession().createCriteria(Order.class)
                                .setFetchMode("items", FetchMode.JOIN)
                                .setFetchMode("discountEntries", FetchMode.JOIN);
criteria.list();

- 複数のバッグを取得できません

Criteria criteria = getSession().createCriteria(Order.class)
                                .createAlias("items", "items", CriteriaSpecification.INNER_JOIN)
                                .setFetchMode("items", FetchMode.JOIN)
                                .createAlias("discountEntries", "discountEntries", CriteriaSpecification.INNER_JOIN)
                                .setFetchMode("discountEntries", FetchMode.JOIN);
criteria.list();

- 空のリストを返します

編集:問題の一部であると思われる別の ManyToMany 関連付けを追加しました。

4

2 に答える 2

2

試しましたか: @ManyToMany(fetch = FetchType.EAGER)? 結果はどうでしたか?

于 2010-01-06T11:00:25.327 に答える
2

LAZYと の設定でコレクションを取得します。

List list = criteria.list();
Hibernate.initialize(list);

これにより、この場合のみ、すぐに初期化されます。

于 2010-01-07T13:00:53.760 に答える