我有一个名为 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={"汤姆索亚", "爱丽丝梦游仙境"})
- User(id=3, books={"汤姆索亚", "圣诞颂歌", "爱丽丝梦游仙境"})
- User(id=4, books={"爱丽丝梦游仙境", "Sql for dummies"})
IN 子句将返回用户 1、2、3,而我只想要用户 1,因为他正好有“Tom sawyer”和“Christmas carol”。
我需要的第二个查询是让用户拥有至少我作为参数给出的列表中的书籍。 例如拥有两本书“汤姆索亚”和“圣诞颂歌”的所有用户加上拥有这两本书和任何其他书籍(一本或多本)的所有用户...
有谁知道如何实现这两个查询? 谢谢!!
最佳答案
试试这个:
select u from Users u left 加入 u.books b where b in (:booksList)
关于java - hql 通过集合查找实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10003061/