0

私は学生のクラスを持っています

class StudentClass {
  String name
  static hasMany = [students: Student]
}

そして学生

class Student {
  String name
}

生徒は好きなだけクラスに参加できます。

['Tom', 'Angelika', 'Timmy'] などの生徒名のリストに基づいてクエリを作成するにはどうすればよいですか。

そして、事前に私が本当にやりたいこと: 検索リストから少なくとも1つの名前が学生リストにあるクラスのリストを取得し、そのリストにある検索リストからの学生の量でこのリストをソートします.

私はかなり長い間その問題に取り組んでいます:/ HQL を使用してこれを行うべきかどうかはわかりません。どんな提案でもいいでしょう

編集:データベースに保存されている次のオブジェクトのクエリ結果として取得したい例を次に示します(簡単な例として、名前属性を持つ学生オブジェクトの代わりに学生の名前を使用します)

StudentClass(name: 'Physics', students: ['Timmy', 'Herbert', 'Christian', 'Martha'])
StudentClass(name: 'Economics', students: ['Franz', 'Paul', 'Joseph'])
StudentClass(name: 'Sports', students: ['Timmy', 'Angelika', 'Christian', 'Jasmine'])
StudentClass(name: 'Math', students: ['Tom', 'Emelie', 'Angelika', 'Timmy'])

これら 4 つの学生クラスは、データベース内で永続的です。

ここで、リストに指定された学生のうち少なくとも 1 人を含むすべての学生クラスを照会したいと考えています。この検索リストには、たとえば ['Tom', 'Angelika', 'Timmy'] を含めることができます。この場合、検索リストの実際にそのクラスに何人の学生がいるかによって結果を並べ替える必要があります。

  1. 数学 - 3 人全員がそのクラスに属しています
  2. スポーツ - 検索リストの 2 人の生徒がスポーツ クラスにいます
  3. 物理学 - 1 人の生徒が物理学のクラスにいます

経済学のクラスは、検索リストの学生がそのクラスに含まれていないため、返されるべきではありません。

Hibernate Documentationのドキュメント全体を読みましたが、ここで「一部」と「要素」が役立つと思いますが、私の問題はソートと可変数の検索語を持つことです。

4

1 に答える 1

0

したがって、学生が特定のリストに学生を含むクラスのリストを取得するには。

リストとともに、指定されたリストに含まれる学生の数を示します。

StudentClass.executeQuery("select sc.name, count(s) from StudentClass sc join sc.students as s where s in (:students) group by sc.name order by 2 desc",[students: [student1, student2]])

それはあなたが望むものですか?

これは、オブジェクトの代わりに名前に基づいて検索します

StudentClass.executeQuery("select sc.name, count(s) from StudentClass sc join sc.students as s where s.name in (:students) group by sc.name order by 2 desc",[students: ['Tom', 'Angelika']])

クエリからカウントを取得することを気にしない場合は、次のことができます。

StudentClass.executeQuery("select sc.name from StudentClass sc join sc.students as s where s.name in (:students) group by sc.name order by count(s) desc",[students: ['Betty', 'Sue']])
于 2013-09-06T12:34:36.283 に答える