如何使用Hibernate Criteria在String集合中查询具有值的对象?

时间:2010-02-23 19:52:19

标签: hibernate

假设Student是包含ComputerScienceStudent和ITStudent的继承层次结构中的父类。 Student定义了一个名为favoriteColors的字段,这是一个值类型的字符串集合。使用标准API,我想查询所有将“蓝色”列为他们最喜欢的颜色之一的学生。

以下是相关的java代码段

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
abstract class Student {

    @CollectionOfElements
    Set<String> favoriteColors = new TreeSet<String>();

我查看了在http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html找到的hibernate文档,看起来这样的事情可能是一个开始

List students = sess.createCriteria(Student.class)
.createCriteria("favoriteColors")
    .add( Restrictions.eq(??????, "blue") )
.list();

但我不知道要填写什么作为属性的名称,因为String不是我定义的类(因此??????)

我真的想避免使用HQL,除非绝对没有办法使用条件。我还想避免添加sqlRestrictions。我不认为示例API会起作用,因为Student是继承层次结构中的抽象父类,我不能创建一个具体的Student作为示例传入。

这可能吗?谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

你有没有尝试过写作

List students = sess.createCriteria(Student.class)
.add(Restrictions.eq("favoriteColors", "blue") )
.list();

编辑:好的,这不起作用。根据{{​​3}},使用Criteria API目前无法引用值类型集合的元素。