2009-07-07 3 views
5

Скажем, у меня есть эта сущность (Hibernate):Hibernate: объекты запроса, которые содержат определенный элемент в CollectionOfElements?

@Entity 
public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    Long id; 

    @CollectionOfElements 
    @IndexColumn("phones_index") 
    Set<String> phones; 
} 

Например, я хочу, чтобы получить экземпляры Person, где их телефоны содержат «555-1234». Как я могу выполнить запрос? Я ищу что-то похожее на:

session.createCriteria(Person.class)./*something*/.add(Restrictions./*something*/"555-1234").list(); 

ответ

9

Привет вы можете попробуйте этот

String phone = "555-1234"; 
Person person= (Person) session.createQuery("from Person p join p.phones pl where pl = :phone").setString("phone", phone).uniqueResult(); 
-1

Я думаю, что вы хотите Restrictions.in() метод Hibernate, которая принимает имя свойства в качестве первого аргумента, а также массив или коллекцию объектов, как второй.

Смотрите также: The Javadoc

Edit: После перечитывания вашего вопроса, я думаю, что вы можете использовать любого из соответствующих Restrictions методов, в частности, eq:

session.createCriteria(Person.class).add(Restrictions.eq("phones", "555-1234")).list(); 
+0

Кто-нибудь протестировал его? – whiskeysierra

+0

@Willi: Не работает для меня, однако принятый ответ. Также есть открытая проблема в системе спящего режима для гибернации по этому поводу: http://opensource.atlassian.com/projects/hibernate/browse/HHH-869 –

+0

Не работает, PLZ см. Http://opensource.atlassian.com/ проекты/спящий режим/просмотр/HHH-869 –

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