【发布时间】:2016-08-21 17:58:53
【问题描述】:
我想导入具有一组专业和一组专业组的配置文件。专业分布在各个专业组中。
定义了以下实体:
@Entity
public class Profile extends BaseEntity<Profile> { // B.E. defines id, creation_time,etc..
@OneToMany(cascade = CascadeType.ALL)
private Collection<Profession> professions;
@OneToMany(cascade = CascadeType.ALL)
private Collection<ProfessionGroup> professionGroups;
// .. getters and setters
}
@Entity
private class Profession extends BaseEntity<Profession> {
@Column(unique = true)
private String name;
// getters and setters
}
@Entity
public class ProfessionGroup extends BaseEntity<ProfessionGroup> {
@Column(unique = true)
private String name;
@ManyToOne(cascade = CascadeType.All)
private Collection<Profession> professions;
// getters and setters
}
以下代码读取一些序列化为 json 的配置文件并希望将其存储到数据库中:
// ...
Profile p = ...; // read from json using some deserializer
p.getProfessionGroups().forEach(pg -> pg.setProfessions(p.getProfessions());
// ..
ProfileService profileService = ...; //
profileService.save(profile);
ProfileService 在内部调用 entityManager.persist(...)。 这里的问题是,每当我想将所有职业分配给所有职业组时,我都会得到一个“重复的键值违反唯一约束”。我可以做些什么来安全地存储配置文件,而不会违反唯一键约束。 JPA 显然希望为职业组中的每个条目创建一个新职业。但是,对专业的引用是相同的。调用 merge(...) 没有成功。
【问题讨论】: