【发布时间】:2012-04-17 16:26:59
【问题描述】:
我有一个名为 User 的 Hibernate 实体,它有一个 Set<Book>
Book 是另一个具有 String 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 for dummies"})
IN 子句将返回用户 1、2、3,而我只想要用户 1,因为他正好有“Tom sawyer”和“Christmas carol”。
我需要的第二个查询是让用户拥有至少我提供的列表中的书籍作为参数。 例如拥有“Tom Sawyer”和“Christmas Carol”两本书的所有用户以及拥有这两本书和任何其他书籍(一本或多本)的所有用户...
有谁知道如何实现这两个查询? 谢谢!!
【问题讨论】:
标签: java hibernate collections hql