我有一个课程实体,如下所示:
@Entity
public class Curriculum {
@ManyToMany
private Set<Language> languages;
...
我正在尝试持久化 Curriculum 实例,但约束是 Language 实例已经在 database 中。
我如何确保在调用持久化时,将一行插入到表curriculum
中,curriculum_languages
映射表而不是language
表中,因为它是一个已经填充的引用表?
编辑1:
- 如果我不指定Cascade.ALL
属性,这是我得到的错误:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.bignibou.domain.Language
- 如果我确实指定了Cascade.ALL
,带有新 ID 的新行将插入到language
表中,这显然不是我想要的......
编辑 2:请注意,我使用 Spring Data JPA 来持久化我的实例,并且来自浏览器的数据是一个 JSON 对象,如下所示:
{"curriculum":{"languages":[{"id":46,"description":"Français"},{"id":30,"description":"Chinois"}],"firstName":"Julianito","dateOfBirth":"1975-01-06","telephoneNumber":"0608965874","workExperienceInYears":3,"maxNumberChildren":1,"drivingLicense":true}}