我有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对这些实体进行操作。当我打电话
specialtyRepository.findAll();
我得到SQL
选择*从专职左外加入专职教授(faculty.ID = Specialty.faculty_id)...
和其他类似的SQL
选择*从大学((ID =?))...
我想阻止此sql请求;
有人可以告诉我如何解决此问题吗?谢谢你的提示
对于@ManyToOne中的延迟加载,我必须在EclipseLink中启用动态编织:http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving
我通过继承解决了这个问题;我创建了没有关系的基本实例;
@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