当我使用queryDSL的orderBy方法对记录进行排序时,如果我在orderBy方法中使用子实体的字段,它会给出重复的记录。
例如,请考虑以下实体:
学生实体:
@Entity
@Table(name = "student")
public class Student {
@Id
@Column(unique = true)
private Integer id;
@OneToMany(mappedBy="student")
private List<Book> books;
@Column
private String name;
图书实体:
@Entity
@Table(name = "book")
public class Books {
@Id
@Column(unique = true)
private Integer id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "studentId")
private Student student;
@Column
private String author;
获取记录的代码:
QStudent qStudent = QStudent.student;
JPQLQuery query = new JPAQuery(getEntityManager());
query.from(qStudent).orderBy(qStudent.books.any().author.asc());
if (!query.list(qStudent).isEmpty()) {
return query.list(qStudent);
}
return null;
}
在上面的代码中,我根据“作者”订购记录,“作者”是子(书)实体的字段。在这种情况下,我得到重复记录(获得4条记录而不是2条记录)。但是,当我使用下面的父(学生)实体字段进行orderBy时,我得到了2条记录,没有重复。
query.from(qStudent).orderBy(qStudent.name.asc());
任何人都可以通过使用没有重复的子实体字段让我知道如何使用queryDSL进行排序吗?提前谢谢。