按联合表的字段Spring JPA排序

时间:2016-05-31 04:15:23

标签: spring spring-data-jpa

我有两个实体类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");

1 个答案:

答案 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