[英]Spring Boot JPA - ManyToOne relationship causes extra sql
我有 3 个具有简单关系的对象,如下所示:
大学:
@Entity
public class University {
@Id
@GeneratedValue
private Long id;
private String name;
}
学院:
@Entity
public class Faculty {
@Id
@GeneratedValue
private Long id;
private String name;
@Column(name = "university_id", nullable = false)
private Long universityId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinFetch(value = JoinFetchType.OUTER)
@JoinColumn(name = "university_id", insertable = false, updatable = false, nullable = false)
private University university;
}
专业:
@Entity
public class Specialty {
@Id
@GeneratedValue
private Long id;
private String name;
@Column(name = "faculty_id", nullable = false)
private Long facultyId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinFetch(value = JoinFetchType.OUTER)
@JoinColumn(name = "faculty_id", insertable = false, updatable = false, nullable = false)
private Faculty faculty;
}
我正在使用 EclipseLink 和 Spring CrudRepository 来操作这些实体。 当我打电话时
specialRepository.findAll();
我得到 sql
SELECT * 从专业左外连接教师开启(faculty.ID = special.faculty_id)...
和额外的 sql 之类的
SELECT * 来自大学 WHERE ((ID =?))...
我想阻止这个 sql 请求;
有人可以告诉我如何解决这个问题吗? 谢谢你的任何提示
对于@ManyToOne 中的延迟加载,我必须在 EclipseLink 中启用动态编织: http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving
我通过 inheritance 解决了这个问题; 我创建了没有关系的基本实例;
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class FacultyBase {
@Id
@GeneratedValue
private Long id;
private String name;
@Column(name = "university_id", nullable = false)
private Long universityId;
}
和有关系的实例
@Entity
public class Faculty extends Faculty {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "university_id", insertable = false, updatable = false, nullable = false)
private University university;
}
结果,在专业实例中,我使用 FacultyBase 而不是 Faculty
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.