而是一個簡單的查詢
CarModel{
String name
static hasMany = [carModelColors: CarModelColor]
}
CarModelColor{
String color
}
查詢
String query="""
select new map(cm.id as id, cm.name as name, cmc.color as color) from CarModel cm left join carModelColors cmc where cmc.color in (:colorList)
""
Map wp=[:]
wp.colorList=['red','black']
def results = CarModel.executeQuery(query,wp,[readOnly:true])
但現在你將結束carModel的儘可能多的迭代他們的顏色,所以如果兩者則2位。
所以,你可以添加一個group by cm.id
以上的訣竅是左連接,顯然in (:list)
您可以刪除選擇新的地圖,如果你喜歡做獲取原始的對象:
String query="""
from CarModel cm where cmc.carModelColors.color in (:colorList)
""
Map wp=[:]
wp.colorList=['red','black']
def results = CarModel.executeQuery(query,wp,[readOnly:true])
當你開始添加左連接時,意味着空值或所有記錄,而不是確定性集合,這是一個連接並且連接也不會返回hasMany,因爲左連接返回所有記錄。
但是,如果你增加了一個左連接
String query="""
select new map(cm as carModel) from CarModel cm left join carModelColors cmc where cmc.color in (:colorList)
""
Map wp=[:]
wp.colorList=['red','black']
def results = CarModel.executeQuery(query,wp,[readOnly:true])
然後,您可以從results.carModel
得到真正的對象
它都去的軌道,但它表明你都在做同樣的方式它的方式取決於該域對象的情況,有時候我會這樣做,因爲域對象中有很多向前走的好東西可以遠離查詢。
記住的地圖是平的,通常包含元素的平面地圖,並且與周圍傳遞的對象是輕量級(在SQL世界)
沒有,如果你用「在」它會給那些只有一個顏色。我需要那些有兩個顏色 – Ashu
@Ashu看看這是否有幫助https://stackoverflow.com/questions/12784960/hibernate-select-entities-where-collection-contains-all-of-the-specified-valus –