3

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つのクエリを達成する方法を知っていますか?ありがとう!!

4

1 に答える 1

2

これを試して:

select u from Users u left join u.books b where b in (:booksList)

于 2012-04-04T00:53:28.753 に答える