Hibernate ManyToOne Mapping с сохранением дублирующихся записей - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть две таблицы базы данных, Timeline и Drive.

Временная шкала имеет следующие столбцы:

timeline: 

id | eventName | driveId

Диск имеет следующие столбцы:

drive: 

id | mileage | date

Каждый столбец миль и дат превращается в УНИКАЛЬНОЕ ограничение в таблице, так что, если пробег и дата одинаковы, это не позволит вставить его в таблицу.

Таблица шкалы времени имеет отношение один к одному с приводом. Я сопоставил эту взаимосвязь с аннотацией ManyToOne в моем классе объектов данных в kotlin.

Однако, когда я сохраняю объект временной шкалы в kotlin, содержащий приводной объект, он ВСЕГДА сохраняет постоянный приводной объект, даже если он является дубликатом.

Моя цель состоит в том, чтобы приводной объект сохранялся только в том случае, если он еще не существует, иначе просто обновите driveId до текущего сохраненного приводного объекта.

Для этого я нашел обходной путь, в котором я сначала запрашиваю таблицу накопителей, чтобы узнать, существует ли еще потенциальный объект timeline.drive.

  • Если приводной объект еще не существует в таблице, я сохраняю приводной объект, а затем сохраняю объект временной шкалы.

  • Если приводной объект существует, я устанавливаю timeline.drive = driveFromTable, а затем сохраняю объект временной шкалы

Примечание. Я установил тип CASCADE, чтобы он не включался при сохранении при реализации этого способа.

Эта манипуляция требует большого количества кода, а также проблем с обслуживанием по мере роста и тестирования кода.

Есть ли способ указать hibernate сохранить дочерний объект (диск), только если он еще не существует в моей базе данных, когда я сохраняю родительский объект?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...