2009-10-13 34 views
2

我最近第一次使用hibernate Criteria API。休眠:在條件中投影多對一

我試圖做這個的HQL

相當於「從任務t選擇t.userTbl」

userTbl屬性是多到一個從任務。 Task.userTbl關係很懶。

所以我想出了這個

Criteria criteria = session.createCriteria(Task.class, "t"); 
criteria.setProjection(Projections.property("t.userTbl")); 
List results = criteria.list(); 

不幸的是這樣做的東西HQL不同。

在HQL中,儘管userTbl關係在映射中設置爲lazy,但HQL熱切地獲取並實現UserTbl的非代理對象。

但是在標準中,我得到了一個我不想要的代理列表。我用setFetchMode弄亂了,但這似乎不是正確的。任何人都有任何想法如何正確地做到上述準則,並獲得像HQL一樣的非代理?

謝謝。

回答

0

嘗試強制任務類和userTbl之間的連接。

+0

嘗試以下,但不幸的是工作。 Criteria criteria = session.create.criteria(Task.class,「t」); criteria.createAlias(「t.userTbl」,「u」); criteria.setProjection(Projections.property(「u」)); List results = session.list(); 挖掘代碼我不得不得出結論,一個實體的投影是不可能的。不幸的是,HQL不會編譯成隨後執行的Criteria。這將確保Criteria提供與HQL相同/一致的功能,這很好。 –

+0

你能解釋一下失敗嗎? 文檔中有預測示例:https://www.hibernate.org/hib_docs/v3/api/org/hibernate/Criteria.html –