https://stackoverflow.com/a/12828955/3395716和https://stackoverflow.com/a/32184186/3395716以及许多其他人提及某些enitityManager.getReference()
方法的答案,可用于避免对数据库进行不必要的选择查询。
我在使用CRUDRepository
尝试将对象保存到数据库时,在spring boot app中遇到了类似的问题。我的班级看起来像,
class StudentSubject {
String studentId;
@ManyToOne
private Subject subject;
@ManyToOne
private Student student;
}
我必须不必要地拨打find()
来从数据库中获取学生和主题对象,只是将它们传递给StudentSubjectRepository
到save()
。但我已经拥有学科和学生的主键。所以我想改用它们,entityManager
看起来就像我需要的那样。
但是我不知道这个entityManager来自哪里,或者在Spring Boot中是否有任何等价物。
答案 0 :(得分:4)
如果您使用JpaRepository界面代替CRUDRepository
,则可以访问getOne(id)
方法,该方法相当于entityManager.getReference
。
答案 1 :(得分:2)
它正常注入,Spring Boot与它无关(Spring Boot只是Spring,虽然有一些配置差异)。
添加
@PersistenceContext
private EntityManager em;
到您的班级,您可以访问原始EntityManager
对象及其提供的所有内容。使用它没有任何问题,你无法通过存储库完成所有工作。