【问题标题】:hql find an entity by collectionhql 通过集合查找实体
【发布时间】: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


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 谢谢,但这也不起作用,我遇到的问题是“IN”子句向我发送了至少拥有一本书的所有用户,而不是我在参数中传递的所有书籍.
    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多