Почему действительно В спящем режиме попытка удалить, когда я пытаюсь обновить/вставить?

20
задан Esteban Küber 7 April 2010 в 21:32
поделиться

3 ответа

Я не уверен, является ли это решением, но Вы могли бы хотеть попробовать:

@OneToMany(mappedBy = "role")

И не имеют @JoinColumn аннотацию? Я думаю, что оба объекта пытаются 'владеть' ассоциацией, которая является, почему SQL мог бы быть испорчен?

кроме того, если Вы хотите удостовериться только, затронутые столбцы обновляются, можно использовать быть в спящем режиме - определенная аннотация на класс:

@Entity
@org.hibernate.annotations.Entity(
    dynamicInsert = true, dynamicUpdate = true
)
3
ответ дан 30 November 2019 в 01:23
поделиться

Я обычно использовал два метода обновления набора (многие примыкают one-many) в, в спящем режиме. Грубая сила путь состоит в том, чтобы очистить набор, вызов, экономит на родителе и затем называет сброс. Затем добавьте, что все участники набора назад и вызов экономят на родителе снова. Это удалит все и затем вставит все. Сброс в середине является ключевым, потому что он вынуждает удаление произойти перед вставкой. Вероятно, лучше только использовать этот метод на небольших коллекциях, так как это действительно повторно вводит всех их.

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

copy the list of existing records to a list_to_delete
for each record from the form
   remove it from the list_to_delete
   if the record exists (based on equals()?  key?)
     change each field that the user can enter
   else if the record doesn't exist
     add it to the collection
end for
for each list_to_delete
  remove it
end for
save

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

7
ответ дан 30 November 2019 в 01:23
поделиться

См. Ответ на вопрос « Переопределение equals и hashCode в Java ».

В нем объясняется, как переопределить методы equals и hashCode, которые, казалось, были вашими проблема, поскольку это сработало после их перезаписи.

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

5
ответ дан 30 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

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