Hibernate 无法使用@OneToMany Spring boot插入数据

Hibernate 无法使用@OneToMany Spring boot插入数据,hibernate,spring-boot,jpa,spring-data-jpa,Hibernate,Spring Boot,Jpa,Spring Data Jpa,我正在尝试使用@OneToMany映射插入带有列表的员工记录 实体类员工: @Entity @Table(name = "employee") public class Employee { @Id @Column(name = "employee_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer employeeId; @Column(name = "em

我正在尝试使用@OneToMany映射插入带有列表的员工记录

实体类员工:

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

}
请求机构:

{
    "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();
}
当我尝试调用API时,得到了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_id(employee)值未设置为员工的post insertof employee上的EmployeePayroll实体


如何解决此问题?

您没有设置双向引用:从EmployeePayroll->Employee

一种简单的方法是在保存引用之前设置它:

employee.getEmployeePayroll().forEach(EmployeePayroll::setEmployee);
保存后:

Employee savedEmployee = employeeRepository.save(employee);

您是否在Hibernate配置中指定了MySql方言?@rena Yes,指定了该方言
Employee savedEmployee = employeeRepository.save(employee);