【发布时间】:2019-05-13 13:31:34
【问题描述】:
我有一个实体Student和一个实体Course。一名学生可以与 0 个或多个课程相关联。反之亦然,一个课程可以关联0个或多个学生。
学生实体:
@Data
@Entity(name = "student")
public class Student {
@Id
private Integer id;
private String name;
@ManyToMany(fetch = EAGER)
@JoinTable(name = "student_course",
joinColumns = @JoinColumn(
name = "studentId",
referencedColumnName = "id",
insertable = false,
updatable = false
),
inverseJoinColumns = @JoinColumn(
name = "courseId",
referencedColumnName = "id",
insertable = false,
updatable = false)
)
private Collection<Course> courses;
}
课程实体:
@Data
@Entity(name = "course")
public class Course {
@Id
private Integer id;
private String name;
@ManyToMany(mappedBy = "courses")
private Collection<Student> students;
}
和实体中的逆关联课程。
这两个 @ManyToMany 关联都应该是只读的。 我的问题是,当我尝试保存 Student 时,Hibernate 也会尝试更新关联的集合。
这是 hibernate 记录学生更新的内容:
Hibernate:
/* delete collection model.student.courses */
delete from `student_course`
where `studentId`=?
Hibernate:
/* insert collection row */
insert into `student_course` (`studentId`, `courseId`)
values (?, ?)
如您所见,hibernate 正在尝试更新也存储两个实体之间关联的表。 这些是我想避免的查询。
【问题讨论】:
-
你试过级联吗?
-
All 不起作用,因为 All 包括 persist 和 delete,因此它会执行相应的操作,我建议尝试仅使用级联 Refresh 并查看它是否有效。
-
我已经尝试过 REFRESH,但 hibernate 仍在为该关联生成删除和插入。
-
好吧...让我也寻找进一步的解决方案
-
@Anas 因为我使用的是多对多关系而不是单对多关系。 2 个实体之间的关联存储在特定的表中,所以我需要有多个 JoinColumns
标签: java hibernate spring-boot jpa