如何解决多对多实体上的JPA WHERE子句
我有两个表Book和Genre。每本书可能具有多种类型,并且多对多表仅包含书籍ID和类型ID。 我想创建一个过滤器,该过滤器将根据其流派来过滤书籍。
@JoinTable(name = "bookGenre",joinColumns = {
@JoinColumn(name = "bookId",referencedColumnName = "id")},inverseJoinColumns = {
@JoinColumn(name = "genreId",referencedColumnName = "id")})
@ManyToMany
private Collection<Genre> genreCollection;
流派类别:
@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
但是它给了我以下错误: “状态字段路径'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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。