как обновить поля первичного ключа с помощью Hibernate - PullRequest
0 голосов
/ 03 января 2019

Мне нужно обновить некоторые поля первичного ключа таблицы в некоторых случаях при использовании данных пружины jpa.Im, используя метод сохранения репозитория jpa, чтобы сохранить изменения, когда измененные столбцы включают часть первичного ключа, это дает исключение.

В настоящее время я получаю следующее исключение, когда обновленные файлы включают столбец из primary key.

org.springframework.orm.ObjectOptimisticLockingFailureException

, если есть способ безопасно обновить основнойключевые поля.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Забудьте об изменении значения первичного ключа. Просто потому, что каждая модификация также подразумевает изменение значений внешнего ключа.

Но есть способ исправить эту ситуацию:

  • Преобразование текущего первичного ключа в уникальный ключ.
  • Добавить числовой столбец или столбец uuid, содержащий сгенерированный технический (т.е. некоммерческий) первичный ключ.
  • К сожалению, вам необходимо обновить все таблицы зависимостей (схемы и значения), чтобы они указывали на новый первичный ключ. Но это нужно сделать один раз, когда база данных находится в автономном режиме.

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

0 голосов
/ 03 января 2019

Если pk изменяется, что происходит с иностранным, вам нужно повторить это изменение на дочерние таблицы? В любом случае, если вам нужно изменить значения pk внутри hibernate, вы должны добавить один уникальный столбец id, сопоставив его как id свойства вместо реального pk без изменения реального pk. Но никогда не меняй ПК - это хорошая идея.

...