Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring Boot中使用JPA的entityManager.getReference?_Java_Spring_Spring Boot_Jpa_Spring Data Jpa - Fatal编程技术网

Java 如何在Spring Boot中使用JPA的entityManager.getReference?

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

和等答案提到了一些enitityManager.getReference方法,可用于避免对数据库进行不必要的select查询

我在SpringBoot应用程序中遇到了类似的问题,在尝试使用CrudePository将对象保存到数据库时。我的班级看起来像

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)检索数据的底层操作。专用存储库的使用增加了另一个抽象层,在测试中,它可以很容易地模拟和注入。