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

时间:2018-01-15 13:28:38

标签: java spring spring-boot jpa spring-data-jpa

https://stackoverflow.com/a/12828955/3395716https://stackoverflow.com/a/32184186/3395716以及许多其他人提及某些enitityManager.getReference()方法的答案,可用于避免对数据库进行不必要的选择查询。

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

class StudentSubject {
    String studentId;
    @ManyToOne
    private Subject subject;
    @ManyToOne
    private Student student;
}

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

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

2 个答案:

答案 0 :(得分:4)

如果您使用JpaRepository界面代替CRUDRepository,则可以访问getOne(id)方法,该方法相当于entityManager.getReference

答案 1 :(得分:2)

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

添加

@PersistenceContext
private EntityManager em;

到您的班级,您可以访问原始EntityManager对象及其提供的所有内容。使用它没有任何问题,你无法通过存储库完成所有工作。