Я участвовал в проекте, где мне нужно сохранить вложенный объект в одной транзакции.
class PurchaseOrder{
@Id
@GeneratedValue(strategy=strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = PurchaseOrderMaterial.class)
@JoinColumn(name = "purchaseOrder_id")
private List<PurchaseOrderMaterial> purchaseOrderMaterials;
......
......
}
And PurchaseOrderMaterial.java
class PurchaseOrderMaterial{
@Id
@GeneratedValue(strategy=strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = PurchaseOrderMaterialDutiesAndTax.class)
@JoinColumn(name = "purchaseOrderMaterial_id", nullable = true)
private List<PurchaseOrderMaterialDutiesAndTax> purchaseOrderMaterialDutiesAndTaxes;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = PurchaseOrderOtherExpenditureItem.class)
@JoinColumn(name = "purchaseOrderMaterial_id")
private List<PurchaseOrderOtherExpenditureItem> purchaseOrderOtherExpenditureItems;
.....
.....
}
Другие две сущности (PurchaseOrderOtherExpenditureItem.java и PurchaseOrderOtherExpenditureItem.java) не будут иметь под-сущности / отношений. Я подставил объект из передней части. В моей реализации сервиса я только назвал
repo.save(purchaseOrder);
Моему приложению потребовалось 5 секунд, чтобы сохранить данные.
PS: приведенный выше код является примером фактического кода может иметь больше дочерних объектов.