java - hql 通过集合查找实体

标签 java hibernate collections hql

我有一个名为 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/

相关文章:

java.util.Mapvalues()方法性能

java - 从java中的字符串集合中对数据进行分组

java.sql.SQLException 找不到适用于 jdbc 的驱动程序 :odbc:man

java - 关闭所有本地 Realm 实例

java - hibernate 列唯一性问题

java - 如何在 Hibernate 中用 TableGenerator 替换已弃用的 MultipleHiLoPerTableGenerator

java - 如何限制java中哈希集的默认排序

Java Thread.interrupted 和中断标志

java - 打开zip文件或JAR list 丢失时出错

hibernate - 当我使用 JPA persist 时,为什么我的 hibernate 查询发生的时间晚于预期?