我有一個域對象,費用,有一個字段名爲initialFields。休眠條件與投影不執行查詢@OneToMany映射
它標註爲這樣:
@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, orphanRemoval = true)
@JoinTable(blah blah)
private final List<Field> initialFields;
現在我試圖用突起以僅拉動某些領域由於性能原因,但是當這樣做的initialFields場總是空。這是唯一的OneToMany字段,也是我試圖用這種方式進行投影檢索的唯一字段。如果我使用常規HQL查詢initialFields進行適當填充,但我當然不能限制這些字段。
部分投影代碼:
Criteria criteria = session.createCriteria(Payment.class);
criteria.createAlias("expense", "e");
ProjectionList properties = Projections.projectionList();
//Some restrictions and more fields
properties.add(Projections.property("e.initialFields"), "initialFields");
criteria.setProjection(properties);
criteria.setFetchMode("e.initialFields", FetchMode.JOIN);
criteria.setReadOnly(true);
criteria.setResultTransformer(Transformers.aliasToBean(Expense.class));
return criteria.list();
當我打開調試,打開顯示SQL,拉initialFields查詢不會出現創建/運行。任何人見過這樣的事情?
我剛剛嘗試使用HQL投影,通過指定每個字段我想拉,然後手動建立對象。在這種情況下,由Hibernate構建的SQL對於initialFields字段不正確。 expense1_.name as col_1_0_, . as col_2_0_, expense1_.account_id as col_3_0_
。 . as col_2_0_ is
其中initialFields將被拉。我的猜測是它應該是expense1_.id as col_2_0_
。
編輯:我剛剛刪除了Result Transformer來檢查每個屬性,並且initialFields屬性確實爲null。
有趣的是,如果我回到那個代碼,我將不得不嘗試這個。謝謝 – Josh 2011-03-17 12:21:39