如何解决在Hibernate / JPA中将带有子对象的对象保存-@OneToMany
在Hibernate中,我想保存一个有子对象的对象。在父对象中,我拥有Set的其他子类。父母与孩子有一个@OneToMany关系。
父母:
@Entity
public class TalentIdentitySetting {
@OneToMany(fetch = FetchType.LAZY,mappedBy = "setting",cascade = CascadeType.ALL,orphanRemoval = true)
private Set<TalentIdentitySettingPower> settingPowers;
@OneToMany(fetch = FetchType.LAZY,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;
}
如何在一次交易中一起保存父母和孩子。 这是我的问题;当孩子想被保存时,父母还没有被保存,并说找不到父母钥匙。 实际上,休眠应该先保存父母,然后再保存孩子。
- 我使用了PERSIST级联,但是仍然没有用。
请帮助我。
解决方法
我相信您的JPA批注是正确的,很可能是您在保存之前未设置您的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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。