JavaSpringBootJPAManyOne关系导致额外的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 Crudepository来处理这些实体。 当我打电话时
specialtyRepository.findAll();
我懂sql
SELECT * FROM specialty LEFT OUTER JOIN faculty ON (faculty.ID = specialty.faculty_id) ...
还有额外的sql之类的
SELECT * FROM university WHERE ((ID = ?)) ...
我想阻止这个sql请求
有人能告诉我如何解决这个问题吗? 谢谢你的提示
# 1 楼答案
对于@ManyToOne中的延迟加载,我必须在EclipseLink中启用动态编织: http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving
我通过继承解决了这个问题; 我创建了没有关系的基本实例
以关系为例
因此,在专业实例中,我使用FacultyBase而不是Faculty