Java 如何在Spring Boot中使用JPA的entityManager.getReference?
和等答案提到了一些enitityManager.getReference方法,可用于避免对数据库进行不必要的select查询 我在SpringBoot应用程序中遇到了类似的问题,在尝试使用CrudePository将对象保存到数据库时。我的班级看起来像Java 如何在Spring Boot中使用JPA的entityManager.getReference?,java,spring,spring-boot,jpa,spring-data-jpa,Java,Spring,Spring Boot,Jpa,Spring Data Jpa,和等答案提到了一些enitityManager.getReference方法,可用于避免对数据库进行不必要的select查询 我在SpringBoot应用程序中遇到了类似的问题,在尝试使用CrudePository将对象保存到数据库时。我的班级看起来像 class StudentSubject { String studentId; @ManyToOne private Subject subject; @ManyToOne private Student
class StudentSubject {
String studentId;
@ManyToOne
private Subject subject;
@ManyToOne
private Student student;
}
我不得不不必要地进行find调用,从数据库中获取student和subject对象,然后将它们传递到StudentSubjectRepository以保存它们。但我已经掌握了学科和学生的主键。所以我想改用它们,entityManager看起来就是我所需要的
但是我不知道这个entityManager是从哪里来的,也不知道Spring Boot中是否有与之等价的东西。它是正常注入的,Spring Boot与它无关Spring Boot只是Spring,尽管有一些配置差异 加上
@PersistenceContext
private EntityManager em;
您可以访问原始EntityManager对象及其提供的所有内容。使用它并没有什么错,您无法完成存储库的所有工作。如果您使用存储库的接口而不是Crudepository,您将获得对getOneid方法的访问权,该方法相当于entityManager.getReference。实际上,通常,控制器应尽可能少地了解从数据库(即entityManager)检索数据的底层操作。专用存储库的使用增加了另一个抽象层,在测试中,它可以很容易地模拟和注入。