hibernate - EclipseLink JPA 与 N+1 @OneToMany 和 @OneToOne 关系与多级实体
问题描述
我必须根据 departmentId 和以下条件获取详细信息。我正在使用eclipseLink JPA 2.4+
if IS_SUBJECT = 2 Teacher entity should join with Subject
if IS_SUBJECT = 1 Teacher entity should join with Lab
当我使用 departmentId 获取值时,应该映射到 Department 和 Teacher 实体。JPA 查询如下。
SELECT distinct f FROM Department f " +
" join fetch f.teacherList fm" +
" join fetch fm.subject fmi on (f.isSubject = 2 and fm.subjectId = fmi.subjectId) " +
" join fetch fm.lab fmg on (f.isSubject = 1 and fm.labId = fmg.labId) " +
" WHERE f.departmentId IN :departmentIdList".
实体如下:
@Entity
public class Department{
@Id
@Column(name = "DEPARTMENT_ID")
private Integer departmentId;
@OneToMany(mappedBy = "department")
private List<Teacher> teacherList;
@Column(name="IS_SUBJECT")
private isSubject;
}
@Entity
public class Teacher{
@Id
@Column(name = "TEACHER_ID")
private Integer teacherId;
@Column(name = "DEPARTMENT_ID")
private Integer departmentId;
@Column(name = "SUBJECT_ID")
private Integer subjectId;
@Column(name = "LAB_ID")
private Integer labId;
@ManyToOne
@JoinColumn(name = "DEPARTMENT_ID", insertable = false, updatable = false)
@BatchFetch(BatchFetchType.JOIN)
private Department department;
@JoinColumn(name = "SUBJECT_ID", insertable = false, updatable = false)
@BatchFetch(BatchFetchType.JOIN)
private Subject subject;
@BatchFetch(BatchFetchType.JOIN)
@JoinColumn(name = "LAB_ID", insertable = false, updatable = false)
private Lab lab;
}
@Entity
public class Subject{
@Id
@Column(name = "SUBJECT_ID")
private Integer subjectId;
@Column(name = "SUBJECT_NAME")
private Integer subjectName;
}
@Entity
public class Lab{
@Id
@Column(name = "LAB_ID")
private Integer labId;
@Column(name = "LAB_NAME")
private Integer labName;
}
生成的查询需要很长时间才能从 eclipse 链接 JPA 中获取。请帮助我编写查询。
解决方案
推荐阅读
- php - Wordpress:自定义分类法未显示在管理列中
- javascript - 函数内的测试变量(jestjs)
- django - Django 将请求数据传递给 Forms.py
- oracle - Oracle Forms 致命错误 FRM-92102:发生网络错误
- xml - 根据子节点值从 XML 文件中获取节点数
- azure-devops - 可以使用导入的 COM 对象构建吗?
- wordpress - 如何从 Wordpress 插件更改谷歌地图的颜色?
- ms-access - 如何在 ACCESS 中将日期从一个表格复制到另一个表格
- css - CSS和溢出的跨平台问题
- java - 找不到符号:LoggingEvent 将 log4j 1.2 升级到 2.8