簡體   English   中英

JPA WHERE 多對多實體子句

[英]JPA WHERE clause on many-to-many entity

我有兩張桌子,書本和流派。 每本書可能有多種流派,多對多表只包含書本 ID 和流派 ID。 我想創建一個過濾器,它可以按類型過濾書籍。

  @JoinTable(name = "bookGenre", joinColumns = {
    @JoinColumn(name = "bookId", referencedColumnName = "id")}, inverseJoinColumns = {
    @JoinColumn(name = "genreId", referencedColumnName = "id")})
  @ManyToMany
  private Collection<Genre> genreCollection;

類型 Class:

  @Id
  @Basic(optional = false)
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id")
  private Integer id;
  @Size(max = 255)
  @Column(name = "name")
  private String name;
  @Column(name = "status")
  private Integer status;
  @ManyToMany(mappedBy = "genreCollection")
  private Collection<Book> bookCollection;

這是我試圖在 JPA 上執行的查詢:

SELECT b.title FROM book b
JOIN bookGenre bg on bg.bookId = b.id
JOIN genre g on bg.genreId = g.id
WHERE g.id = 1
--Filter books that have genre with id 1

我在 JPA 上嘗試了以下操作: SELECT b FROM Book b WHERE b.genreCollection.id = 1

但它給了我以下錯誤:“state 字段路徑 'b.genreCollection.id' 無法解析為有效類型。”

編輯:我發現我可以使用原生 sql 查詢和內置結果集映射到 Book POJO EntityManager.createNativeQuery(query, Book.class) 所以我只是使用它並將我的查詢與 StringJoiner 串在一起。

我認為您的 JPA 查詢應該是

SELECT b FROM Book b INNER JOIN b.genreCollection g WHERE g.id = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM