3

我有一个名为User的休眠实体,它有一个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,这看起来更好,但它并没有给我拥有确切书籍集的用户。

例如,如果我在数据库中有以下用户:

  • 用户(id=1,书籍={“汤姆索亚”,“圣诞颂歌”})
  • 用户(id=2,books={“汤姆索亚”,“爱丽丝梦游仙境”})
  • 用户(id=3,books={“汤姆索亚”,“圣诞颂歌”,“爱丽丝梦游仙境”})
  • User(id=4, books={"爱丽丝梦游仙境", "Sql for dummies"})

IN 子句将返回用户 1、2、3,而我只想要用户 1,因为他正好有“Tom sawyer”和“Christmas carol”。

我需要的第二个查询是让用户至少拥有我提供的列表中的书籍作为参数。例如,拥有两本书“Tom Sawyer”和“Christmas Carol”的所有用户以及拥有这两本书和任何其他书籍(一本或多本)的所有用户......

有谁知道如何实现这两个查询?谢谢!!

4

1 回答 1

2

try this:

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

于 2012-04-04T00:53:28.753 回答