【发布时间】:2010-01-06 10:48:30
【问题描述】:
我的问题对我来说似乎很简单,但我似乎无法找到有效的答案。我有一个休眠实体,它与另一个实体具有多对多关联,默认情况下会延迟获取。我想创建一个 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();
- 返回一个空列表
编辑:添加了另一个多对多关联,因为这似乎是问题的一部分。
【问题讨论】:
-
我已经设法通过将列表更改为集合来使用 setFetchMode("items", FetchMode.JOIN) 实现这一点(这消除了“多袋”问题)。但是,这会导致外部连接和笛卡尔连接。我正在寻找一种使用子选择的方法...