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

Reg*_*ser 3 java spring jpa spring-data-jpa spring-boot

/sf/answers/898026881//sf/answers/2252893051/这样的答案以及许多其他人提到了一些enitityManager.getReference()方法,可以用来避免对数据库进行不必要的选择查询.

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

class StudentSubject {
    String studentId;
    @ManyToOne
    private Subject subject;
    @ManyToOne
    private Student student;
}
Run Code Online (Sandbox Code Playgroud)

我必须不必要地find()调用从数据库中获取学生和主题对象,只是将它们传递StudentSubjectRepositorysave()他们。但是我已经有了主题和学生的主键。所以我想改用它们,entityManager看起来像我需要的。

但是我不知道这个 entityManager 来自哪里,或者在 Spring Boot 中是否有任何等效的东西。

Mac*_*ski 7

如果您使用JpaRepository接口,为您的仓库,而不是的CRUDRepository,你将有机会获得getOne(id)方法是等效的entityManager.getReference


Kay*_*man 5

它是正常注入的,Spring Boot 与它无关(Spring Boot 只是 Spring,尽管有一些配置差异)。

只需添加

@PersistenceContext
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)

到您的班级,您可以访问原始EntityManager对象及其提供的所有内容。使用它没有什么问题,你不能用存储库完成所有事情。