繁体   English   中英

Spring 启动 JPA - 多对一关系导致额外的 sql

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM