我已经在一个域中以下关联我的工作性质(实际上不是不幸盗)。一艘船有许多海盗。我希望能够找到所有有船长的船只,而且船员没有任何陆地润滑油。查询上的的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