我有两个数据库表,时间轴和驱动器。
时间轴包含以下列:
timeline:
id | eventName | driveId
驱动器包含以下列:
drive:
id | mileage | date
每个里程和日期列均在表中成为UNIQUE约束,因此,如果里程和日期相同,则不允许将其插入表中。
时间轴表与驱动器具有多对一关系。我已经在kotlin的数据对象类中将这种关系与ManyToOne注释进行了映射。
但是,当我将时间轴对象保存在包含驱动器对象的kotlin中时,即使它是重复的,它也将始终保留驱动器对象。
我的目标是,如果驱动器对象尚不存在,则仅将其保留,否则,只需将driveId更新为当前保留的驱动器对象。
要实现此目的,我找到了一种解决方法,在该方法中,我首先查询驱动器表以查看即将发生的timeline.drive对象是否存在。
如果表中尚不存在驱动器对象,请先保存驱动器对象,然后再保存时间轴对象。
如果驱动器对象确实存在,则设置timeline.drive = driveFromTable
,然后保存时间轴对象
注意:我已将CASCADE类型设置为在以这种方式实现时不包括persist。
此操作涉及大量代码,并且随着代码的增长和测试而难以维护。
在保存父对象时,是否有一种方法可以告诉hibernate仅保存子对象(驱动器)(如果该子对象当前不在数据库中)?