FindBy和OrderBy没有相应的顺序 - Spring Data Jpa

时间:2017-11-10 00:08:56

标签: spring spring-data-jpa

我正在使用这种方法:

List<Client>findTop10ByGenderOrderBySurvey_Results_ScoreDesc(char gender);

逻辑是:

我有一个客户模型,参考调查模型的OneToMany,调查模型有一个OneToOne的参考,结果模型有得分字段。 因此,一个客户可以进行许多调查,每个调查都有一个分数。

我想按顺序订购客户,按降序排列,然后获得评分最高的前10名男性客户。

我正在使用的方法会按性别过滤,并返回10个客户端。 但它不止一次地返回同一个客户端,因为它有几个调查。而不是以有序的方式。

我做错了什么以及如何解决这个问题?

public class Client {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "client_id")
private Long id;

@Column(name = "gender")
private char gender;

@OneToMany(mappedBy = "client", cascade = CascadeType.ALL)
@JsonManagedReference  
private List<Survey> survey= new ArrayList<Survey>();

}



public class Survey{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "SURVEY_ID")
private Long Id;

@ManyToOne
@JsonBackReference
@JoinColumn(name = "client_id")
public Client client;


@OneToOne(cascade=CascadeType.ALL)
@JsonManagedReference
@JoinColumn(name = "surveyresult_id")
private Results surveyResults;

 }

public class Results {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "SURVEYRESULT_ID")
private Long Id;

private Double score;
}

1 个答案:

答案 0 :(得分:0)

要过滤掉重复的结果,请使用distinct关键字:

List<Client> findDistinctTop10ByGenderOrderBySurvey_Results_ScoreDesc(char gender);

OrderBy语法不正确。要按多个属性排序,只需将它们添加为:

List<Client> findDistinctTop10ByGenderOrderBySurveyDescResultsDescScoreDesc(char gender);

注意:当方法名称变得很长时,表明查询可能过于复杂而无法成为派生查询。然后,建议使用@Query和更短的更高级别的方法名称来描述查询。