java - 在不知道父对象的情况下使用 JPA 保存对象

标签 java database jpa spring-data-jpa

我的 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/

相关文章:

php - 平均评级值计数

android - 从数据库中提取的多级 ListView

sql - 当列已经为 NOT NULL 时,无法在可为空的列上定义 PRIMARY KEY 约束

java - Hibernate 组合实体

Java扫描仪异常问题

java - 来自 swingx 的 JComboBox

java - 鞋子 4 - LoadError : no such file to load -- bundler/setup

mysql - JPA、EclipseLink 和区分大小写的 mysql 的问题

java - hibernate_sequence 序列名的重复条目

java - Java 中 Shiny 的 GUI