按关联字段 (一对多) 排序



我正在尝试使用下面的 JPQL 对Faculty实体进行排序,但我检索了太多相同 id 的教职员工。

@NamedQuery(
        name = "Faculty.findFacultySortedByPreferredTime",
        query = "SELECT f FROM Faculty f JOIN f.preferredTimes p ORDER BY p.day, p.startTime"
),

这是我正在工作的Faculty实体

public class Faculty implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String firstName;
private String middleName;
private String lastName;
@OneToMany(cascade = CascadeType.PERSIST)
@OrderBy(value = "day, startTime")
private List<PreferredTime> preferredTimes;
// some codes removed

我做错了吗?

在大多数情况下,JPA 为您从数据库中选择的每一行返回一个实体,因此当连接到 1:M 或 M:M 关系时,您将获得对象的多个实例。 在这种情况下,学院有很多首选时间。 如果教职员工 1 具有首选时间 A 和首选时间 C,而教职员工 2 具有首选时间 B 和首选时间 D,则由于您指定的联接和排序,您将获得 (faculty1、faculty2、faculty1、faculty2) 的有序列表。

DISTINCT 关键字用于筛选出非不同的实体/行:

"SELECT DISTINCT f FROM Faculty f JOIN f.preferredTimes p ORDER BY p.day, p.startTime"

最新更新