Hibernate ManyToOne映射可保留重复记录

时间:2018-09-04 22:59:03

标签: java spring hibernate jpa kotlin

我有两个数据库表,时间轴和驱动器。

时间轴包含以下列:

timeline: 

id | eventName | driveId

驱动器包含以下列:

drive: 

id | mileage | date

每个里程和日期列均在表中成为UNIQUE约束,因此,如果里程和日期相同,则不允许将其插入表中。

时间轴表与驱动器具有多对一关系。我已经在kotlin的数据对象类中将这种关系与ManyToOne注释进行了映射。

但是,当我将时间轴对象保存在包含驱动器对象的kotlin中时,即使它是重复的,它也将始终保留驱动器对象。

我的目标是,如果驱动器对象尚不存在,则仅将其保留,否则,只需将driveId更新为当前保留的驱动器对象。

要实现此目的,我找到了一种解决方法,在该方法中,我首先查询驱动器表以查看即将发生的timeline.drive对象是否存在。

  • 如果表中尚不存在驱动器对象,请先保存驱动器对象,然后再保存时间轴对象。

  • 如果驱动器对象确实存在,则设置timeline.drive = driveFromTable,然后保存时间轴对象

注意:我已将CASCADE类型设置为在以这种方式实现时不包括persist。

此操作涉及大量代码,并且随着代码的增长和测试而难以维护。

在保存父对象时,是否有一种方法可以告诉hibernate仅保存子对象(驱动器)(如果该子对象当前不在数据库中)?

0 个答案:

没有答案