首页 > 解决方案 > JPA @OrderBy 不对关系进行排序

问题描述

我有以下实体:

public class QuestionnaireTemplateEntity extends BaseEntity {
    @Id
    @GeneratedValue(generator="system-uuid")
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    @Column(updatable = false, nullable = false)
    private String id;
    @OneToMany(mappedBy="questionnaireTemplate", cascade = CascadeType.ALL)
    @OrderBy("subQuestionnaireOrder ASC")
    private Set<SubQuestionnaireTemplateEntity> subQuestionnaires = new HashSet<>();
}


public class SubQuestionnaireTemplateEntity extends BaseEntity {
    @Id
    @GeneratedValue(generator="system-uuid")
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    @Column(updatable = false, nullable = false)
    private String id;

    @OneToMany(mappedBy="subQuestionnaireTemplate", cascade = CascadeType.ALL)
    @OrderBy("questionOrder ASC")
    private Set<QuestionEntity> questions = new HashSet<>();
    private Integer subQuestionnaireOrder;
}

public class QuestionEntity extends BaseEntity {
    @Id
    @GeneratedValue(generator="system-uuid")
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    @Column(updatable = false, nullable = false)
    private String id;
    @ManyToOne
    @JoinColumn(name="sub_questionnaire_template_id")
    private SubQuestionnaireTemplateEntity subQuestionnaireTemplate;
    private Integer questionOrder;
}  

现在,当我检索所有 QuestionnaireTemplate 时,我希望每个关系都已排序,但事实并非如此。没有什么是排序的,它总是随机的。

questionnaireTemplateRepository.findAll()

标签: javaspring-bootjpaspring-data-jpa

解决方案


我总是使用注释“@OrderColumn”而不是“@OrderBy”注释。这个答案提供了一个简单的例子,如何实现这个注释以在 Hibernate 中实现排序。


推荐阅读