我的问题对我来说似乎很简单,但我似乎找不到有效的答案。我有一个休眠实体,它与另一个实体有ManyToMany关联,默认情况下是懒惰地获取的。我想创建一个条件,该条件将返回已加载了ManyToMany关联的Entity。

这是有问题的实体(删除了不相关的部分):

@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关联,因为这似乎是问题的一部分。

最佳答案

使用LAZY设置和获取集合:

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


仅在这种情况下,这将立即对其进行初始化。

关于hibernate - hibernate 条件:急于加载ManyToMany集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2012316/

10-09 06:21