Будьте в спящем режиме, измените идентификатор/первичный ключ

Проблема в том, что вы используете запятую вместо двух точек trackCircuitReducer, trackCircuitReducer

Используйте это:

trackCircuitReducer: trackCircuitReducer

18
задан naXa 19 January 2017 в 13:41
поделиться

3 ответа

Я не могу представить, почему вы хотите это сделать , Совсем. Зачем вам менять личность лица? Вам также необходимо обновить все внешние ключи в других таблицах, которые на него указывают. Похоже на боль, без выгоды. Возможно, вам лучше сделать это «бизнес-ключом» (обычное свойство) и использовать более постоянный суррогатный ключ. У меня такое чувство, что вы все делаете неправильно, но если вы настаиваете ...

По сути, что вы ' Это создание нового Клиента и удаление старого, и именно так я бы это сделал в Hibernate.

[pseudocode]

Begin Transaction

// create new customer from old
newC = Session.Load<Customer>(42)
Session.Evict(newC)
newC.Id = 1492
Session.Save(newC)

// update other relationships to point to newC
// ....

// delete old customer
oldC = Session.Load<Customer>(42)
Session.Delete(oldC)

Commit Transaction

Однако, вам, вероятно, лучше всего сделать это сразу за одну простую транзакцию SQL, и в любом случае вы рискуете иметь параллельные процессы, у которых уже есть экземпляр «старого» Клиент, который может вызвать некоторые ошибки.

11
ответ дан 30 November 2019 в 07:13
поделиться

Друг мой, Ты прав. Нет способа (или я не знаю способа) изменить первичный ключ без использования операторов HQL. Это ненормально, но это правда.

4
ответ дан 30 November 2019 в 07:13
поделиться

Вам не нужно выполнять очистку вручную, так как рамка заметит, что вы выполняете поиск по сущности, изменения которой еще не внесены, эти изменения будут удалены до получения, в этом я думаю, что idMyApp будет 1 вместо правильного сгенерированного идентификатора из базы данных.... что приведет к сбою вашего кода get...

-121--5086185-

Прочитайте книгу «Код завершен», более конкретно главу 11 об именовании. Это контрольный список (из здесь , требуется свободная регистрация):

Общие соображения по присвоению имен

Полностью ли и точно имя описывает, что представляет собой переменная? Относится ли название к реальной проблеме, а не к решению на языке программирования? Имя достаточно длинное, чтобы не озадачивать его? Находятся ли квалификаторы вычисляемых значений в конце имени, если таковые имеются? Используется ли имя Count или Index вместо Num?

Именование определенных видов данных

Являются ли имена индексов цикла значимыми (что-то, кроме i, j или k, если цикл имеет длину более одной или двух строк или вложен)? Все ли «временные» переменные были переименованы в нечто более значимое? Называются ли логические переменные так, что их значения, когда они истинны, ясны? Включают ли имена перечисляемых типов префикс или суффикс, указывающий категорию - например, Color_ для Color_Red, Color_Green, Color_Blue и так далее? Называются ли именованные константы для абстрактных сущностей, которые они представляют, а не для чисел, на которые они ссылаются?

Соглашения об именовании

Различает ли соглашение локальные, классовые и глобальные данные? Различает ли соглашение имена типов, именованные константы, перечисляемые типы и переменные? Определяет ли соглашение параметры только для ввода для подпрограмм на языках, которые их не применяют? Насколько конвенция совместима со стандартными конвенциями для данного языка? Отформатированы ли имена для удобства чтения?

Короткие имена

Используется ли в коде длинные имена (если не требуется использовать короткие)? Позволяет ли код избежать сокращений, сохраняющих только один символ? Все ли слова сокращаются последовательно? Имена произносятся? Можно ли избежать имен, которые могут быть неправильно названы? Задокументированы ли короткие имена в таблицах перевода?

Общие проблемы с присвоением имен: вы избежали...

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

-121--4407439-

Фактически, согласно спецификации JPA запрещено изменять первичный ключ:

Приложение не должно изменять значение первичного ключа [8]. Поведение не определено, если это происходит. [9]

(от EJB 3 постоянство (JPA)спецификация, пункт 2.1.4)

21
ответ дан 30 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: