2010-02-23 56 views
0

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

下面是相关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(); 

,但我不知道什么填写作为财产的名称,因为字符串不是我定义的类(因此??????)

我真的想避免使用HQL unles使用标准绝对没有办法做到这一点。我也想避免添加sqlRestrictions。我不认为示例API会起作用,因为Student是继承层次结构中的抽象父类,并且我无法创建具体的学生作为示例传入。

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

回答

0

你有没有试着写

编辑:好吧,这是行不通的。根据this related question,使用Criteria API目前不可能引用值类型集合的元素。

+0

只是做了,它失败了,消息ERROR org.hibernate.util.JDBCExceptionReporter - 参数#1没有设置 –

+0

我明白了。编辑包括 - 我发现了一个相关的问题,希望有所帮助。 – meriton

+0

这是个坏消息。但是,谢谢。至少现在我知道不要继续追求这条路,直到hibernate获得这个功能。 –

相关问题