hibernate JPA - 使用queryDSL

时间:2016-11-23 09:13:56

标签: hibernate jpa querydsl

当我使用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进行排序吗?提前谢谢。

0 个答案:

没有答案