【问题标题】:JP QL - Filtering result in a One To Many relationshipJP QL - 在一对多关系中过滤结果
【发布时间】:2011-04-01 03:45:25
【问题描述】:

我一直在尝试构建 JPQL 查询,并希望比我有更多 JPA 经验的人能提供帮助。考虑以下两个实体:

class Author{
  String name
  @OneToMany(mappedBy="author")
  Set<Book> books
}

class Book{
  String title  
  Boolean inPrint
  @ManyToOne
  Author author
}

如果我想返回特定作者(按姓名)并急切地获取(即 LEFT JOIN FETCH)Book.inPrint 标志为真的书籍,我将如何在 JPQL 中表达?

【问题讨论】:

    标签: java orm jpa jpql


    【解决方案1】:
    SELECT a FROM Author a LEFT JOIN a.books b WHERE b.inPrint = true OR b is null
    

    【讨论】:

    • 这将返回正确的作者列表,但对于匹配的作者,将检索所有书籍,包括 inPrint = false 的书籍。 Hibernate 会愉快地执行这个查询的 join fetch 变体,但这违反了 JPQL 规范。有时将查询转过来就足够了: select b from Book b left join a.author a where ... 这样你只会得到你想要的,但是有不止一本匹配书的作者将被复制。
    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多