簡體   English   中英

Hibernate標准,投影不執行@OneToMany映射的查詢

[英]Hibernate criteria with projection not performing query for @OneToMany mapping

我有一個域對象Expense,它有一個名為initialFields的字段。

它的注釋如下:

@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, orphanRemoval = true)
@JoinTable(blah blah)
private final List<Field> initialFields;

現在我正在嘗試使用Projections以便僅出於性能原因而拉出某些字段,但是這樣做時,initialFields字段始終為null。 它是唯一的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();

當我打開調試並啟用show sql時,拉出initialFields的查詢似乎沒有創建/運行。 有沒有見過這樣的人?

我剛剛嘗試使用HQL投影,通過指定我要拉的每個字段然后手動構建對象。 在這種情況下,Hibernate構建的SQL對於initialFields字段是不正確的。 expense1_.name as col_1_0_, . as col_2_0_, expense1_.account_id as col_3_0_ expense1_.name as col_1_0_, . as col_2_0_, expense1_.account_id as col_3_0_ . as col_2_0_ is . as col_2_0_ is初始字段將被拉出的位置。 我的猜測是它應該是expense1_.id as col_2_0_

編輯:我剛剛刪除了Result Transformer以檢查每個屬性,而initialFields屬性確實為null。

我有類似的問題,對我來說是明確指定條件中的joinType

Criteria criteria = session.createCriteria(Payment.class);
criteria.createAlias("expense", "e", CriteriaSpecification.LEFT_JOIN);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM