我的問題似乎很簡單,但我似乎無法找到有效的答案。我有一個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