我想導入具有一組職業的個人檔案和一組職業組。專業分佈在專業組中。休眠:重複的鍵值違反集合上的唯一約束
以下實體的定義:
@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(。 ..)。 這裏的問題是,我得到一個「重複的鍵值違反唯一約束」,每當我想分配所有職業到所有professionGroups。我能做些什麼來安全地存儲配置文件,而不會得到唯一的密鑰約束違規。 JPA顯然希望爲專業組中的每個條目創建一個新的專業。但是,對職業的參考是相同的。調用合併(...)沒有成功。
你的回答是正確的,但上下文有點廣泛。 – phobos