单向关系查询
Unidirectional relation query
我有以下实体:
@Entity
@Table(name = "BOOKS")
public class Book {
@Id
private Long id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "BOOK_ID")
private List<Page> pages = new ArrayList<>();
...
...
}
@Entity
@Table(name = "PAGES")
public class Page {
@Id
private Long id;
@Column(name = "COLOR", nullable = false)
private String color;
...
...
}
给定一个特定的页面,我想找出它所属的书(例如根据页面的颜色)。
在数据库中生成表后,使用 liquibase,我可以执行以下查询:
select * from Books where id in (select book_id from Pages where color = ?)
我正在使用 Spring 数据 (JpaRepository),但是当我尝试编写 JPQL 查询时,我发现我不能...因为关系是单向的(我不想要改变)。
我的问题是 - 如何编写此查询?
select distinct b from Book b
join b.pages p
where p.color = :color
我有以下实体:
@Entity
@Table(name = "BOOKS")
public class Book {
@Id
private Long id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "BOOK_ID")
private List<Page> pages = new ArrayList<>();
...
...
}
@Entity
@Table(name = "PAGES")
public class Page {
@Id
private Long id;
@Column(name = "COLOR", nullable = false)
private String color;
...
...
}
给定一个特定的页面,我想找出它所属的书(例如根据页面的颜色)。
在数据库中生成表后,使用 liquibase,我可以执行以下查询:
select * from Books where id in (select book_id from Pages where color = ?)
我正在使用 Spring 数据 (JpaRepository),但是当我尝试编写 JPQL 查询时,我发现我不能...因为关系是单向的(我不想要改变)。
我的问题是 - 如何编写此查询?
select distinct b from Book b
join b.pages p
where p.color = :color