我有一個Hibernate標準調用,我想在一個SQL語句中執行。我想要做的是選擇具有一系列值的屬性的子項(SQL IN子句)的父實例,同時使用外連接加載子項。這是我到目前爲止有:有限孩子的休眠標準
Criteria c = session.createCriteria(Parent.class);
c.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN)
.setFetchMode("c", FetchMode.JOIN)
.add(Restrictions.in("c.property", properties));
c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
return c.list();
下面是一些樣本數據:
Parent
Parent ID
A
B
C
Children
Child ID Parent ID property
... A 0
... A 2
... A 7
... B 1
... C 1
... C 2
... C 3
我想要做的就是回到父母和他們的孩子,如果一個孩子有平等的財產我綁定參數。假設屬性是包含{2}的數組。在這種情況下,該調用將返回父母A和C,但他們的子集合將只包含元素2。父[兒童]:
A [2] & C [2]
我想是:
A [0,2,7] & C [1,2 3]
如果這不是一個bug,它似乎是一個破碎的語義。我沒有看到如何調用A.getChildren()或C.getChildren()並返回1條記錄會被認爲是正確的 - 這不是一個投影。即如果我增加了查詢使用默認選擇獲取,它返回正確的孩子集合,albiet與查詢的衆多:
c.createAlias("children", "c").add(
Restrictions.in("c.property", properties));
這是一個錯誤?如果不是,我怎麼能達到我想要的結果?
對,SQL是簡單的部分。我正在尋找的是標準調用。 ;)另外,請記住,這將需要外部聯接來填充子實體。 –
第二個查詢是否獲得了父項並且延遲加載子項? – dfb
是的,對於每個返回的父記錄,正在執行的子查詢正是我試圖避免的。看起來這可能實際上是一個缺陷,但我很好奇,如果任何人有解決方法:https://hibernate.onjira.com/browse/HHH-3524 –