Hibernate Criteria:急切地加载ManyToMany集合

时间:2010-01-06 10:48:30

标签: hibernate criteria fetch

我的问题对我来说似乎很简单,但我似乎无法找到有效的答案。我有一个Hibernate实体,它与另一个实体有一个ManyToMany关联,默认情况下是懒惰获取的。我想创建一个Criteria,它将返回实体,并且急切地加载了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关联,因为这似乎是问题的一部分。

2 个答案:

答案 0 :(得分:2)

您尝试过:@ManyToMany(fetch = FetchType.EAGER)?结果是什么?

答案 1 :(得分:2)

使用LAZY设置获取收藏集:

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

这将立即对其进行初始化,仅适用于此情况。