Moa*_*did 8 java mysql spring hibernate
我有4个实体:
与companyContract有关的个人资料:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "profile", cascade = { CascadeType.ALL })
@Fetch(value = FetchMode.SUBSELECT)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private List<CompanyContract> companyContracts;
Run Code Online (Sandbox Code Playgroud)
CompanyContract:与时间表有关系:
@OneToMany(mappedBy = "companyContract", cascade = { CascadeType.ALL },orphanRemoval = true, fetch = FetchType.EAGER)
@Fetch(FetchMode.SUBSELECT)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private List<Timesheet> timesheets;
@ManyToOne
@JoinColumn(name = "IDPROFILE")
private Profile profile;
Run Code Online (Sandbox Code Playgroud)
时间表与发票有关系:
@OneToMany(mappedBy = "timesheet", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
private List<Invoice> invoices;
@ManyToOne
@JoinColumn(name = "IDCONTRACT")
private CompanyContract companyContract;
Run Code Online (Sandbox Code Playgroud)
发票:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_TIMESHEET")
private Timesheet timesheet;
Run Code Online (Sandbox Code Playgroud)
所以正如你在这里看到的,我正在使用org.hibernate.annotations.CascadeType.DELETE_ORPHAN所以我可以删除父项的子项.
如果我执行这个:
Profile p = companyContract.getProfile();
p.getCompanyContracts().remove(companyContract);
companyContract.setProfile(null);
profileService.update(p);
Run Code Online (Sandbox Code Playgroud)
--->删除顺序应为:
删除发票 - > Timesheets - > CompanyContract,不是吗?
而我得到这个错误:
org.hibernate.exception.ConstraintViolationException:列'IDCONTRACT'不能为null
我已经检查过,这个错误发生在 profileService.updateProfile(p);
问题似乎是IDCONTRACT表中保存时间表的列有NOT NULL限制。将其删除并重试。
如果您要自动生成架构,请尝试添加@Basic(optional = true)到 Timesheet.companyContract:
@Basic(optional = true)
@ManyToOne
@JoinColumn(name = "IDCONTRACT")
private CompanyContract companyContract;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |