java - Spring Boot JPA - ManyToOne关系导致额外的sql

标签 java spring-boot jpa eclipselink

我有 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

SELECT * FROM specialty LEFT OUTER JOIN faculty ON (faculty.ID = specialty.faculty_id) ...

以及额外的sql,例如

SELECT * FROM university WHERE ((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

关于java - Spring Boot JPA - ManyToOne关系导致额外的sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58898813/

相关文章:

java - 我需要锁定行以防止其他事务读取

hibernate - 使用 native 查询的 JPA(Hibernate) 和 postgresql 批量插入

java - Druid 经纪人遇到 UnresolvedAddressException

java - Java Swing 中的 Firefox 选项 Pane UX 设计?

java - 如何使用 List<Entity> 以外的多个属性在 Spring 中返回自定义响应

java - application.properties 被忽略,取自别处

javax.persistence.EntityManager.createQuery : when with/when without resultClass

java - 以 return 结束 void 方法;

java - ActiveMQ 在不使用 JMX、JMS 的情况下获取队列大小

java - 如何确保 Flyway 在我的 bean 之前加载?