假设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作为示例传入。
这可能吗?谢谢你的时间!
答案 0 :(得分:0)
你有没有尝试过写作
List students = sess.createCriteria(Student.class)
.add(Restrictions.eq("favoriteColors", "blue") )
.list();
编辑:好的,这不起作用。根据{{3}},使用Criteria API目前无法引用值类型集合的元素。