2013-07-11 3 views
0

У меня есть следующие два класс:Горма: Найти по содержанию коллекции

class Person{ 

String name 

    static hasMany = [ 
    items: Item 
] 
} 

class Item{ 
String name 
} 

Несколько Лиц также может иметь один и тот же элемент. Я пытаюсь получить список всех Лица, у которых есть определенный предмет в их коллекции. И.Е. Оба человека A и B имеют элемент A в своем списке, поэтому возвратите их оба. К сожалению, их нет findAllByCollectionContains(), ближайшим является findAllByCollection(), который требует точного набора.

Я пытался выполнить executeQuery, чтобы дать мне больше контроля и еще ничего не придумал.

Пример того, что я пробовал:

Person.executeQuery("select name from Person p where ? in p.items",[item]) 

Любые предложения?

ответ

1

Вы должны присоединиться к сбору пунктов, то вы можете запросить по нему легко

Person.executeQuery("select name from Person p join p.items as i where i = ?",[item]) 
+0

Это прекрасно работает. но не могли бы вы объяснить немного больше, почему это работает? Благодаря! –

+1

Когда вы присоединяетесь к 'p.items', теперь вы можете запрашивать на основе отдельного элемента вместо коллекции элементов. Взгляните на документы HQL: http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/queryhql.html. –

Смежные вопросы