【发布时间】:2017-07-24 15:38:45
【问题描述】:
我有两个实体——Person 和 Record:
@Entity
public class Person {
@Id
@GeneratedValue
private Long id;
@JsonIgnore
@OneToMany(mappedBy = "person", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Record> records;
}
@Entity
public class Record {
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "person", referencedColumnName = "id", nullable = false)
private Person person;
}
我需要在一个查询中为每个现有人员获取 5 条记录。
我为 jpql 找到的唯一解决方案如下所示:
"SELECT r FROM Person p LEFT JOIN p.records r WHERE r.id IN " +
"(SELECT r1.id FROM Record r1 WHERE r1.person = p AND " +
"(SELECT Count(r2) FROM Record r2 WHERE r2.person = r1.person AND r2.id < r1.id) <= 5)
但在 spring jpa 中可能有更优雅的解决方案。
有人知道吗?
【问题讨论】:
-
你在用什么
DB? -
如果您的数据库支持,您可以使用本机查询和分析函数相当轻松地做到这一点。
-
数据库-mysql。而且我不能在这个项目中使用原生查询。
标签: spring jpa spring-data spring-data-jpa jpql