我有两个表部门,教师,如下所示:
$.Ajax
由于教师中有一些旧记录,其中包含Dept的无效值,例如,Dept = 5的教师,但部门中没有D_ID = 5。
在SQL中,我可以使用
Departments Teachers
--- ---
D_ID T_ID
Code Name
Dept (logically reference D_ID)
获取预期结果,但我不确定如何使用LEFT JOIN在JPA中执行,并将结果作为Teachers实体返回。
我已经定义了教师实体和部门实体,但由于旧记录,我不确定是否应该在教师或部门实体中定义SELECT t.*, COALESCE(d.Code, t.Dept) as Dept FROM Teachers t LEFT JOIN Departments d ON d.D_ID = t.Dept
关系。
@OneToOne / @OneToMany / @ManyToOne
我是初学者,使用JPA,我使用JPA 2.0与SpringDataJPA和Hibernate。
请给予一些帮助。
答案 0 :(得分:0)
您可以在存储库接口中使用namedQuery,并在类Teachers中定义构造函数,并在查询中使用它来返回所需的结果。假设教师是包 main.ct 你可以这样做:
@Query("SELECT new main.ct.Teachers(t.T_ID, t.Name, t.Dept, COALESCE(d.Code, t.Dept)) FROM Teachers t LEFT JOIN Departments d WHERE d.D_ID = t.Dept")
List<Teachers> findAllTeachers();
定义构造函数:
public Teachers(String id, String name, String dept, String deptCode)
{
this.T_ID = id;
this.Name = name;
this.Dept = dept;
this.DeptCode = deptCode;
}
如果您还没有为教师定义存储库界面,请执行以下操作:
@Repository
public interface TeachersRepo extends JpaRepository<Teachers, String>{
//write here your query
}
或者您可以使用注释 @NamedQuery 在您的实体中执行相同的操作 如本链接所述: