按加入 table 的字段 Spring JPA 排序
Sort by joined table's field Spring JPA
我有两个实体类请求,用户:
//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");
有没有一种方法可以按用户名对请求列表进行排序?喜欢:
Sort = new Sort(Direction.ASC,"User.name");
是的。 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
这在一对一关系和多对一关系上效果很好,但是因为使用左外连接来实现 order by 子句,如果连接的实体表示多关系(就像在一对多中一样),Sort
可能会导致 SQL 返回重复记录。出现这种情况是因为 Sort
参数将始终导致新的左外连接,即使要连接的实体已经在查询中连接!
编辑 顺便说一句,有一个关于这个问题的公开票:https://jira.spring.io/browse/DATAJPA-776
我有两个实体类请求,用户:
//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");
有没有一种方法可以按用户名对请求列表进行排序?喜欢:
Sort = new Sort(Direction.ASC,"User.name");
是的。 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
这在一对一关系和多对一关系上效果很好,但是因为使用左外连接来实现 order by 子句,如果连接的实体表示多关系(就像在一对多中一样),Sort
可能会导致 SQL 返回重复记录。出现这种情况是因为 Sort
参数将始终导致新的左外连接,即使要连接的实体已经在查询中连接!
编辑 顺便说一句,有一个关于这个问题的公开票:https://jira.spring.io/browse/DATAJPA-776