我的问题似乎很简单,但我似乎无法找到有效的答案。我有一个Hibernate实体,它与另一个实体的ManyToMany关联,默认情况下会延迟访问。我想创建一个Criteria,它将返回带有ManyToMany关联的Entity,并且热切地加载它。休眠标准:急切加载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();
- 返回一个空列表
编辑:添加另一种多对多关联作为这似乎是问题的一部分。
我已经设法通过setFetchMode(“items”,FetchMode.JOIN)实现此目的通过更改列表设置(这摆脱了“多袋”问题)。这会导致外部连接,然而,还会产生笛卡尔连接。我正在寻找一种方法来实现这一点... – Zecrates 2010-01-11 05:28:02