按加入 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