Hibernate:查询包含CollectionOfElements中指定元素的实体?

时间:2009-07-07 07:15:37

标签: java database hibernate collections

假设我有这个实体(用于Hibernate):

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

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

例如,我想获取其手机中包含“555-1234”的Person实例。 我怎么能对此进行查询?我正在寻找类似的东西:

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

2 个答案:

答案 0 :(得分: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 :(得分:-1)

我认为您需要Hibernate的Restrictions.in()方法,该方法将属性名称作为第一个参数,并将数组或对象集合作为第二个参数。

另请参阅:The Javadoc

修改:重新阅读您的问题后,我认为您可以使用任何相关的Restrictions方法,尤其是eq

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