Sql HQL:在对象上使用elements()

Sql HQL:在对象上使用elements(),sql,hibernate,hql,Sql,Hibernate,Hql,假设我有一个包含两个表的数据库:班级和学生。每个表都包含有关主题的元数据。例如,类包含字段“classid”、“name”和“room_number”,而学生包含字段“name”、“classid”、“age”和“height”(假设一个学生只能在一个类中) 如果我想编写一个HQL查询,让我得到所有包含名为“Joe”、“Bob”和“Fred”的学生的类,该怎么办?如果学生只包含'classid'和'name',我想我可以用HQL写以下内容 from Classes as class where

假设我有一个包含两个表的数据库:班级和学生。每个表都包含有关主题的元数据。例如,类包含字段“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”也可以执行这些连接,但编写起来要紧凑得多!或者有更好的方法来完成这项工作吗?

使用子选择:

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

我的查询选择包含所有三个学生“Joe”、“Bob”和“Fred”的类。您可以查询选择包含“Joe”、“Bob”或“Fred”的类。我也可以使用子查询。我猜连接更容易优化——但我真的不知道。有没有一种简单的方法来组合嵌套子查询?