我已經在一個域中以下關聯我的工作性質(實際上不是不幸盜)。一艘船有許多海盜。我希望能夠找到所有有船長的船隻,而且船員沒有任何陸地潤滑油。查詢上的的hasMany關係
class Pirate {
String name
Rank rank
enum Rank {
CAPTAIN,
DECK_HAND,
LAND_LUBBER
}
}
class Ship {
static hasmany = [crew:Pirate]
}
我嘗試使用Hibernate作爲標準,從長遠來看,我想這是一個命名查詢,我可以鏈接與其他查詢。這是我正在使用的標準。
def pirateShips = Ship.withCriteria {
crew {
eq('rank', Pirate.Rank.CAPTAIN)
not {
eq('rank', Pirate.Rank.LAND_LUBBER)
}
}
}
當我創建下列實體時,我沒有得到預期的結果。
def blackbeard = new Pirate(name:'Blackbeard', rank:Pirate.Rank.CAPTAIN).save()
def deckHand = new Pirate(name:'Deck Hand', rank:Pirate.Rank.DECK_HAND).save()
def landLubber = new Pirate(name:'Land Lubber', rank:Pirate.Rank.LAND_LUBBER).save()
def ship = new Ship(name:'Ship 1', crew:[blackbeard]).save()
def infiltrator = new Ship(name:'Ship 2', crew:[blackbeard, landLubber]).save()
def normalShip = new Ship(name:'Ship 3', crew:[blackbeard, deckHand]).save(flush:true)
運行在所有3艘上述提到的查詢結果時,我會想到要返回只船1和3船返回(船舶2有一個討厭的笨蛋的土地是沒有用的,對我來說)。
有沒有辦法使用的標準API生成這種查詢的方法嗎?如果不是,我將如何去在HQL中編寫查詢?
我想我可能不得不回到HQL,感謝您的詳細描述。 buildLazy看起來很有用,我的腳本的頂部有Ship.list()*。delete()。 – 2010-06-30 08:33:59