【发布时间】:2011-03-09 17:53:03
【问题描述】:
我在我正在处理的域中有以下关联(不幸的是,实际上不是海盗)。一艘船有许多海盗。我希望能够找到所有有船长但船员中没有任何陆上润滑剂的船只。
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 中编写查询?
【问题讨论】:
标签: hibernate grails grails-orm