我有三个实体。第一个是公司实体(见下文)。
@Entity
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column
private String name;
@JoinColumn(name = "company_id")
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Employee> employees;
@OneToMany(mappedBy = "company")
private List<HistoryRecord> historyRecords;
第二个是员工
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Integer id;
@Column
String name;
@ManyToOne
@JoinColumn(name = "company_id", nullable = true)
private Company company;
@OneToMany(mappedBy = "employee")
private List<HistoryRecord> historyRecords;
这是我的HistoryRecord课程
@Entity
public class HistoryRecord {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Integer id;
@ManyToOne
@JoinColumn(name = "company_id")
Employee employee;
@ManyToOne
@JoinColumn(name = "employee_id")
Company company;
@Column(name = "hire_date")
Date hireDate;
@Column(name = "resign_date")
Date resignDate;
当我尝试在Employee上执行删除操作时,我收到此错误
HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; SQL [delete from employee where id=?]; constraint ["CONSTRAINT_12: PUBLIC.HISTORY_RECORD FOREIGN KEY(EMPLOYEE_ID) REFERENCES PUBLIC.EMPLOYEE(ID)
我认为问题出在级联操作中,但我不确定。有人可以说我该如何解决它?
答案 0 :(得分:2)
问题是由于Employee - HistoryRecord的关系造成的。 HistoryRecord上的employee属性不可为空。如果您希望在删除员工时删除HistoryRecord,则需要将cascade属性添加到Employee上的historyRecords的@OneToMany(mappedBy =“employee”)。
@OneToMany(mappedBy = "employee",cascade = CascadeType.REMOVE)
答案 1 :(得分:0)
ENDDM生成
ALTER TABLE "public"."project_group" ADD CONSTRAINT "mandant" FOREIGN KEY (mandant_id) REFERENCES "mandant" ("mandant_id") ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
用于数据库和
@OneToMany(cascade = CascadeType.REMOVE)
在Java中。
答案 2 :(得分:0)
更新公司类中的关系映射缺少级联。
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL)
private List<HistoryRecord> historyRecords;