我有两个实体类Request,User:
\}.*?=(.*?)\{
我可以按创建时间对请求列表进行排序:
//Ommiting some annotations for brevity
public class User{
private Long id;
private String name;
private Integer age;
}
public class Request{
private Long id;
private String message;
private Date createTime;
@ManyToOne
@JoinColumn(name="user_id")
private User user;
}
是否有可能按用户名称对请求列表进行排序?像:
Sort = new Sort(Direction.ASC,"createTime");
答案 0 :(得分:1)
是的。 new Sort(Direction.ASC,"user.name");
应该可以正常工作。
Spring Data JPA会将外部用户留在请求中,并按所连接列的名称进行排序,从而产生如下所示的SQL:
select
id, message, createTime
from
Request r
left outer join User u on u.id = r.user_id
order by
u.name asc
这在一对一的情况下效果很好,并且就像您在此处的多对一关系一样,但是因为如果所连接的实体表示许多关系(例如, (一对多)),Sort
可能会导致返回重复记录的SQL。之所以如此,是因为Sort
参数将始终导致新的左外部联接,即使要联接的实体已经在查询中联接了!
编辑:顺便说一句,有一个与此问题有关的公开票证:https://jira.spring.io/browse/DATAJPA-776