我正在将Spring Data JPA与Hibernate一起使用。我有三个实体,标题,行和明细。 Header实体与Line实体具有一对多关系,而Line实体与Detail实体具有一对多关系:
@Entity(name = "Header")
@Data
@Table(name = "HEADER")
public class Header {
@Id
@SequenceGenerator(name = "header_generator",sequenceName = "HEADER_SEQ",allocationSize = 1)
@GeneratedValue (strategy = GenerationType.SEQUENCE,generator = "header_generator")
@Column(name="HEADER_ID")
private Long headerId;
@Column(name="DESCRIPTION")
private String description;
@JsonmanagedReference
@OneToMany(orphanRemoval = true,cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinColumn(name="HEADER_ID")
@BatchSize(size = 20)
private List<Line> lines = new ArrayList<>();
}
@Entity(name = "Line")
@Data
@Table(name = "LINE")
public class Line {
@Id
@SequenceGenerator(name = "line_generator",sequenceName = "LINE_SEQ",allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "line_generator")
@Column(name="LINE_ID")
private Long lineId;
@Column(name="CATEGORY")
private String category;
@JsonBackReference
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="HEADER_ID",referencedColumnName = "HEADER_ID",insertable = false,updatable = false,nullable = false)
private Header header;
@JsonmanagedReference
@OneToMany(orphanRemoval = true,fetch = FetchType.LAZY)
@JoinColumn(name="LINE_ID")
@BatchSize(size = 20)
private List<Detail> details = new ArrayList<>();
}
@Entity(name = "Detail")
@Data
@Table(name = "DetaIL")
public class Detail {
@Id
@SequenceGenerator(name = "template_generator",sequenceName = "DetaIL_SEQ",generator = "template_generator")
@Column(name="DetaIL_ID")
private Long detailId;
@Column(name = "HEADER_ID")
private Long headerId;
@Column(name="DESCRIPTION")
private String description;
@JsonBackReference
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="LINE_ID",referencedColumnName = "LINE_ID",nullable = false)
private Line line;
}
我通过调用CrudRepository的标准save()方法创建一个新的Header记录。标头包含至少一个新的行记录,并且行将包含至少一个新的明细。 JSON类似于:
{
"description": "Test Header","lines": [
{
"category": "JJK","details": [
{
"description": "Test Detail"
}
]
}
]
}
生成的header_id未保存到数据库的“ Detail”的header_id字段中。由于我无法在保存之前对其进行手动设置,因此我可以使用任何JPA或Hibernate批注将Line的header_id绑定到Detail的header_id上吗?