【问题标题】:HQL query for getting some items in one to many relation用于以一对多关系获取某些项目的 HQL 查询
【发布时间】:2018-04-25 14:12:41
【问题描述】:

我在互联网上搜索了所有内容,但没有找到答案。

我有两个类之间的 oneToMany 关系,我想获得列表的一部分。

@Entity
@Table(name = "author")
class Author {
     @Id
     private Long id;

     @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
     @JoinColumn(name = "AUTHOR_ID", referencedColumnName = "id")
     private List<Book> books = new ArrayList<>();

}

@Entity
@Table(name="book")
class Book {

    @Column
    private Integer year;

    @Column
    private Integer position;

}

我想从特定作者那里获得特定年份且低于特定职位的所有书籍

@Query(From Book b where b.year=:year and b.position<:position and b.authorId=:id)
List<Book> getAllBooks(Integer year, Integer position, Long id)

我也试过了

@Query(From Book b where b.year=:year and b.position<:position and b.id in (select a.books.id from author a where a.id:=id)

谢谢你帮助我

【问题讨论】:

  • 你能发布你的数据库结构吗

标签: java hibernate jpa hql jpql


【解决方案1】:

如果您尝试使用 JPQL 设置查询,在我看来它应该是......

@Query("SELECT b FROM Book b WHERE b.year = :year and b.position < :position and b.authorId = :id")

更新

抱歉——我之前通过复制和修改您的第一个示例来回答。我错过了加入。

这可能行得通...

@Query("SELECT a.books b FROM Author a WHERE b.year = :year AND b.position < :position AND a.authorId = :id")

你也可以试试这个……

@Query("SELECT b FROM Book b WHERE b.year = :year AND b.position < :position AND b IN (SELECT a.books FROM Author a WHERE a.id = :id")

【讨论】:

  • 我得到这个异常:原因:org.hibernate.QueryException:无法解析属性:authorId of:Book
  • 抱歉,没用。我有一个 sql 错误。但是我在我的服务中写了一个 jpqlQuery 并且它有效。感谢您的宝贵时间
猜你喜欢
  • 2015-03-31
  • 2013-09-19
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 2012-05-23
  • 2014-09-03
  • 2014-08-09
  • 1970-01-01
相关资源
最近更新 更多