【发布时间】:2022-01-03 15:52:07
【问题描述】:
我有以下表结构。 (唯一的限制是避免同一员工有多个“详细信息”——我无法更改数据库结构)。
https://i.ibb.co/r3pYQFj/fk.png
create table employee (
employee_id number(19),
salary number(10),
constraint pk_employee primary key (employee_id)
);
create table employee_details (
employee_details_id number(19),
employee_id number(19) not null,
address varchar2(256),
gender char(1),
constraint fk_employee foreign key (employee_id) references employee (employee_id),
constraint fk_employee_unq unique (employee_id)
);
模型类:
@Entity
@Table(name = "EMPLOYEE")
public class Employee implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "empgen")
@SequenceGenerator(name = "empgen", sequenceName = "SEQ_EMP", allocationSize = 1)
@Column(name = "EMPLOYEE_ID")
private Long id;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="EMPLOYEE_ID")
private EmployeeDetail empDetail;
...
@Entity
@Table(name = "EMPLOYEE_DETAIL")
public class EmployeeDetail implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "empdetgen")
@SequenceGenerator(name = "empdetgen", sequenceName = "SEQ_EMP_DET", allocationSize = 1)
@Column(name = "EMPLOYEE_DETAILS_ID")
private Long id;
@Column(name = "EMPLOYEE_ID")
private Long employeeId;
...
我有一个接收这样的 JSON 的休息控制器:
{
"employee": {
"salary": 80000,
"empDetail": {
"adress": "ST EXAMPLE",
"gender": "M"
}
}
}
我正在尝试通过休眠 (5.4.28) 将所有实体保存为第一个实体,然后使用它的主键,EmployeeDetails 使用它的父主键,但我得到了这个:
java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("DCC"."EMPLOYEE_DETAILS"."EMPLOYEE_ID")
为什么要在父母之前救孩子?
类应该如何映射?
【问题讨论】:
标签: sql hibernate jpa hibernate-mapping