2013-02-20 87 views
0

我無法獲取作爲條件表達式結果的相關實體對象列表。我有兩個具有多對多關係的對象,例如ObjectA < - > ObjectB,其中ObjectA的單個實例可以綁定到ObjectB的多個實例,而ObjectB的實例可能綁定到ObjectA的多個實例。這種關係存儲在典型的連接表中,但出於遺留原因,對象模型是這樣的,即ObjectB不直接瞭解它與ObjectA的關係。我試圖創建一個條件表達式來獲取所有通過連接表對象,具有與任何對象A的實例對象B的以下內容:從與休眠條件的關係項目實體

getDetachedCriteria(ObjectAObjectB.class) 
.setFetchMode("objectB", FetchMode.JOIN) 
.setProjection(Projections.property("objectB")); 

但是預期這不起作用,因爲它出現Projection API只支持投影標量屬性而不支持實體對象。是否可以通過Projections或其他Criteria API指定這種類型的選擇?

+0

糾正我,如果我錯了,但你的映射是ObjectA N <--> 1 ObjectB所以你應該使用ManyToOne? – overmeulen 2013-02-20 09:19:56

+0

@overmeulen對不起,我誤解了這個問題,我更新了我的帖子以糾正一些錯誤。這種關係實際上是多對多的,但是查詢是基於連接表的。 – Clayton 2013-02-21 01:09:26

+0

你能告訴我們你的映射嗎?你不能讓ObjectB使用雙向映射意識到它與ObjectA的關係嗎?它不會改變你的數據庫模式,它會讓事情變得更容易! – overmeulen 2013-02-21 09:47:20

回答

2

你不能用Hibernate Criteria API做到這一點。它可能在HQL或JPA2 Criteria API中,但不能使用Hibernate Criteria API。

+0

感謝您的迴應。我擔心這是事實。 – Clayton 2013-02-22 01:42:12

+0

@JB Nizet,我們如何通過HQL來實現? – Victor 2014-06-06 16:38:21

+1

@Victor:從ObjectA對象中選擇不同的objectB加入objectA.collectionOfBs objectB其中... – 2014-06-06 17:59:23