У меня есть следующая ассоциация в домене, над которым я работаю (к сожалению, это не пираты).На корабле много пиратов.Я хочу быть в состоянии найти все корабли, которые имеют капитана и не имеют каких-либо наземных смазчиков в команде.
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?