java - 在 hibernate 中删除订单

标签 java mysql spring hibernate

我有 4 个实体:

Profile与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;

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;

Timesheet 与发票有关系:

@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;

发票:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_TIMESHEET")
private Timesheet timesheet;

正如您在这里看到的,我正在使用 org.hibernate.annotations.CascadeType.DELETE_ORPHAN 以便我可以删除父项的子项。

如果我执行这个:

Profile p = companyContract.getProfile();
p.getCompanyContracts().remove(companyContract);
companyContract.setProfile(null);
profileService.update(p);

---> 删除的顺序应该是:

删除发票 --> 时间表 --> 公司契约(Contract),否?

相反,我收到了这个错误:

org.hibernate.exception.ConstraintViolationException: Column 'IDCONTRACT' cannot be null

而且我已经检查过,这个错误发生在 profileService.updateProfile(p);

之后

最佳答案

问题似乎是包含时间表的表中的 IDCONTRACT 列具有 NOT NULL 限制。将其删除并重试。

如果您要自动生成架构,请尝试将 @Basic(optional = true) 添加到 Timesheet.companyContract:

@Basic(optional = true)
@ManyToOne
@JoinColumn(name = "IDCONTRACT")
private CompanyContract companyContract;

关于java - 在 hibernate 中删除订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46409354/

相关文章:

java - 如何实例化 JAXBElement<String> 对象?

java - 分析 Java 应用程序的 CPU 缓存性能的工具?

java - 将参数注入(inject) Akka Props 和 Creator 实例

php - 从mysql生成多个txt文件

json - Spring Boot - 在 URI 处读取 CSV 文件并将其作为 JSON 返回

java - JOptionPane 边框的颜色

mysql - 如何使用联合从表中选择记录,以便第一个查询的结果将每个结果与第二个查询的相应结果连接起来?

mysql - 带范围的计数查询

java - 具有 LDAP 身份验证的自定义权限

mysql - 不同的移动计数在 spring 应用程序的 crudRepository 中不起作用