我有以下類(簡化爲清楚起見):EJBQL - 如何在LEFT現場查詢結果排序連接
Class Top {
InternationalStringType name;
}
Class InternationalStringType {
List<LocalizedStringType> localizedString;
}
Class LocalizedStringType {
String value;
}
以下EJBQL查詢成功地檢索頂部的所有實例與他們的子對象填充:
SELECT DISTINCT Object(t) FROM Top t LEFT OUTER JOIN t.name nm LEFT OUTER JOIN nm.localizedString nm_ls
我想修改上面的查詢等,結果被Top.name.localizedString.value
什麼是正確的語法做這個排序?我想下面的查詢,但我得到「錯誤:SELECT DISTINCT,ORDER BY表達式必須出現在選擇列表」
SELECT DISTINCT Object(t) FROM Top t LEFT OUTER JOIN t.name nm LEFT OUTER JOIN nm.localizedString nm_ls ORDER BY nm_ls.value ASC
它不是很清楚,我要放什麼東西在選擇列表中的ORDER BY子句。
下面給出錯誤的「」後對象(T)不管我逗號後放:
SELECT DISTINCT Object(t), Object(nm_ls) FROM Top t LEFT OUTER JOIN t.name nm LEFT OUTER JOIN nm.localizedString nm_ls ORDER BY nm_ls.value ASC
在情況下,其相關的我的JPA實現休眠3.6.4.Final。 TIA爲您提供幫助。
您正在強制將一個連接添加到作爲集合的localizedString中。這意味着對於1個單獨的實體,將會有X個唯一行(每個引用的localizedString一個),所有這些都需要完全構建該實體。由於所有的X都是不同的,所以不同的是沒有你想要的效果 - 這是爲你的Top實體返回一個單獨的結果。 JPA要求讀回的每一行都以實體的形式返回,但是一些JPA提供者可以允許通過本地api來過濾。 – Chris 2013-03-07 18:31:18