Spring Data JPA自联接查询给出了意想不到的结果

时间:2015-03-18 11:31:01

标签: spring-data-jpa self-join

我有一个mysql数据库表'Faculties',如下所示,

enter image description here

我的实体类(FacultyEntity)如下

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Faculty_Id")
private Integer facultyId;

@Column(name = "Faculty_Name", length = 100, nullable = false, unique = true)
private String facultyName;

@ManyToOne(cascade = { CascadeType.REFRESH })
@JoinColumn(name = "HOD_ID", nullable = true)
private FacultyEntity hodId;

我想在我的应用程序中显示结果,按HOD和然后才能排序。这就是我试过的

@Query("from FacultyEntity f ORDER BY f.hodId.facultyName, f.facultyName")

但我总共得到了4行这样的排序。我认为这是因为HOD_ID列中的空值,但我不确定。我是新手。

enter image description here

预期结果将是

enter image description here

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

当您在查询中执行f.hodId时,它会隐式转换为内部联接,从而消除null列中HOD_Id的两行。

试试这个

@Query("from FacultyEntity f left join f.hodId hod ORDER BY hod.facultyName, f.facultyName")