Userという名前のHibernateエンティティがあります。これにはSet <Book
>があります。
Bookは、文字列bookNameを持つ別のエンティティです。
書籍の正確なリストを持っているすべてのユーザーを検索したい。
List<Book> booksList = Arrays.AsList(
getBook("Tom Sawyer"), getBook("Christmas Carol"));
List<Book> usersHavingThoseBooks = getCurrentSession()
.createQuery("from Users u inner join u.books b where b in (:booksList)")
.setParameterList("booksList", booksList)
.list();
しかし、それは解決策ではありません。私は本のIDを照会しようとしましたが、これはより良いように見えますが、正確な本のセットを持っているユーザーだけが表示されるわけではありません。
たとえば、データベースに次のユーザーがいる場合:
- User(id = 1、books = {"Tom Sawyer"、 "Christmas Carol"})
- User(id = 2、books = {"Tom Sawyer"、 "不思議の国のアリス"})
- User(id = 3、books = {"Tom Sawyer"、 "Christmas Carol"、 "Alice in wonderland"})
- User(id = 4、books = {"不思議の国のアリス"、 "ダミーのSQL"})
IN句はユーザー1、2、3を返しますが、ユーザー1は正確に「Tomsawyer」と「Christmascarol」を持っているので、ユーザー1だけが必要です。
私が必要とする2番目のクエリは、パラメーターとして指定したリストに少なくとも本があるユーザーを含めることです。たとえば、「TomSawyer」と「ChristmasCarol」の2冊の本を持っているすべてのユーザーに加えて、2冊の本と他の本(1冊以上)を持っているすべてのユーザー...
誰かがこれらの2つのクエリを達成する方法を知っていますか?ありがとう!!