我正在尝试使用@OneToMany映射插入带有列表的员工记录。
实体类Employee:
@Entity
@Table(name = "employee")
public class Employee {
@Id
@Column(name = "employee_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer employeeId;
@Column(name = "employee_name")
private String employeeName;
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JsonIgnoreProperties(allowSetters = true, value = { "employee" })
private List<EmployeePayroll> employeePayroll;
}
实体类EmployeePayroll:
@Entity
@Table(name = "EmployeeSalary")
public class EmployeePayroll {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(nullable = false)
private long salary;
@Temporal(TemporalType.DATE)
private Date fromDate;
@Temporal(TemporalType.DATE)
private Date toDate;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "employee_id", referencedColumnName = "employee_id")
private Employee employee;
}
请求正文:
{
"employeeName":"krishna",
"employeePayroll":[
{
"salary":200,
"fromDate":"2015-01-01",
"toDate":"2017-02-02"
}
]
}
服务方法:
public Integer createEmployee(Employee employee) {
Employee savedEmployee = employeeRepository.save(employee);
return savedEmployee.getEmployeeId();
}
当我尝试调用该接口时,我得到了org.springframework.dao.DataIntegrityViolationException.
could not execute statement; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
MYSQL日志:
Query insert into employee (employee_name) values ('krishna')
Query insert into employee_salary (employee_id, from_date, salary, to_date) values (null, '2015-01-01', 200, '2017-02-02')
在插入Employee的post时,employee_id (Employee)值似乎未设置为EmployeePayroll实体。
如何解决这个问题?
发布于 2018-10-09 03:35:45
您未设置引用双向: from EmployeePayroll -> Employee
一种简单的方法是在保存引用之前设置它:
employee.getEmployeePayroll().forEach(EmployeePayroll::setEmployee);
保存后:
Employee savedEmployee = employeeRepository.save(employee);
https://stackoverflow.com/questions/52707624
复制相似问题