我的 JPA 存储库中有 2 个实体:学生和教师。当我使用 find 方法找到学生时,我希望相应的老师也被填充。但是,当我保存 Student 对象时,我只有相应的teacher_id,而没有整个相应的 Teacher 对象。我可以使用 teacher_id
执行 findById
,但事实证明这样做成本高昂,因为我有许多 Student 对象需要保存,并且每次保存都会导致 2 个 DB 调用。
@ManyToOne
@JoinColumn(name="teacher_id")
private Teacher teacher;
最佳答案
正如评论所示,我会选择进行新的调用并加载整个教师实体,将其分配给学生实体,然后保存它。如果您有业务限制(例如每位教师最多可容纳多少学生),您可能会需要此功能。
话虽如此,为了回答您的问题,您可以使用自定义插入 @Query 向 JpaRepository 添加新方法。与此处解释的内容类似:
https://www.baeldung.com/jpa-insert
与此类似的东西:
@Transactional
public void insertWithTeacherId(Student student, long teacher_id) {
entityManager.createNativeQuery("INSERT INTO student (id, teacher_id) VALUES (?,?)")
.setParameter(1, student.getId())
.setParameter(2, teacher_id)
.executeUpdate();
}
关于java - 在不知道父对象的情况下使用 JPA 保存对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58372580/