HQL:在对象上使用elements()

时间:2011-07-21 16:58:48

标签: sql hibernate hql

说我有一个包含两个表的数据库:班级和学生。每个表都包含有关相关主题的元数据。例如,类包含字段'classid','name'和'room_number',学生包含字段'name','classid','age'和'height'(比如学生只能在一个班级中)。

如果我想写一个HQL查询来获取所有包含姓名为“Joe”,“Bob”和“Fred”的学生的课程怎么办?如果学生只包含'classid'和'name',我想我可以在HQL中编写以下内容。

from Classes as class where
  'Joe' in elements(class.students) and
  'Bob' in elements(class.students) and
  'Fred' in elements(class.students)

然而,在这种情况下,学生是一个对象。我是否需要明确地执行连接?

from Classes as class
  join class.students as s1
  join class.students as s2
  join class.students as s2
where
  s1.name = 'Joe'
  s2.name = 'Bob'
  s3.name = 'Fred'

我想使用'Fred' in elements也可以执行这些连接,但写入更紧凑!或者有更好的方法完全这样做吗?

1 个答案:

答案 0 :(得分:7)

使用子选择:

from Classes c 
where c.classid in(
      select s.classid from students s where s.name in('Joe', 'Bob', 'Fred')
   )