[英]save an object with childs in Hibernate/JPA - @OneToMany
在 Hibernate 中,我想保存一個有子對象的對象。在父對象中,我有一組其他子類。 父母與孩子有 @OneToMany 關系。
家長:
@Entity
public class TalentIdentitySetting {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "setting", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<TalentIdentitySettingPower> settingPowers;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "setting", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<TalentIdentitySettingSpeciality> settingSpecialities;
}
孩子 :
@Entity
public class TalentIdentitySettingPower {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "IDENTITY_SETTING_ID", nullable = false)
private TalentIdentitySetting setting;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "POWER_ID", nullable = false)
private BasePower power;
}
我如何在一筆交易中同時保存父母和孩子。 這是我的問題; 當孩子想要被保存時,父母還沒有被保存,並說沒有找到父母密鑰。 實際上,hibernate 應該先保存父級,然后才是子級。
請幫我。
我相信你的 JPA Annotation 是正確的,這很可能是你的 TalentIdentitySettingPower.setting 在保存之前沒有被設置
假設您有以下代碼
TalentIdentitySetting setting = new TalentIdentitySetting();
HashSet<TalentIdentitySettingPower> powers = new HashSet<>();
powers.add(new TalentIdentitySettingPower());
powers.add(new TalentIdentitySettingPower());
powers.add(new TalentIdentitySettingPower());
setting.setSettingPowers(powers);
repository.save(setting);
這將失敗並抱怨空值問題
如果在 TalentIdentitySettingPower 中添加構造函數方法
public TalentIdentitySettingPower(TalentIdentitySetting setting) {
this.setting = setting;
}
和
TalentIdentitySetting setting = new TalentIdentitySetting();
HashSet<TalentIdentitySettingPower> powers = new HashSet<>();
powers.add(new TalentIdentitySettingPower(setting));
powers.add(new TalentIdentitySettingPower(setting));
powers.add(new TalentIdentitySettingPower(setting));
setting.setSettingPowers(powers);
repository.save(setting);
這將成功地將值保存到數據庫中。
根據您的示例,我創建了一個應用程序https://github.com/hepoiko/stack-63703687
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.