JPA CascadeType. ВСЕ не удаляет висячие строки

130
задан rtruszk 16 December 2015 в 12:37
поделиться

4 ответа

Если Вы используете его с, в спящем режиме, необходимо будет явно определить аннотацию CascadeType.DELETE_ORPHAN, который может использоваться в сочетании с JPA CascadeType.ALL.

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

последовательность выполнения

  1. выбирает основную строку, которая будет удалена
  2. , дочерние элементы выборки
  3. удаляют все дочерние элементы
  4. , удаляют основную строку
  5. , закрыли сеанс

С JPA 2.0, можно теперь использовать опцию orphanRemoval = верный

@OneToMany(mappedBy="foo", orphanRemoval=true)
158
ответ дан 24 November 2019 в 00:21
поделиться

Согласно Персистентность Java с В спящем режиме , , каскадная висячая строка удаляет , не доступно как аннотация JPA.

Это также не поддерживается в JPA XML.

4
ответ дан 24 November 2019 в 00:21
поделиться

Если вы используете JPA с EclipseLink, вам нужно будет установить аннотацию @PrivateOwned .

Документация: Eclipse Wiki - Использование расширений EclipseLink JPA - Глава 1.4 Как использовать аннотацию @PrivateOwned

12
ответ дан 24 November 2019 в 00:21
поделиться

Если вы используете JPA 2.0, теперь вы можете использовать атрибут orphanRemoval = true объекта @xxxToMany аннотация для удаления сирот.

Фактически, CascadeType.DELETE_ORPHAN устарел в 3.5.2-Final.

112
ответ дан 24 November 2019 в 00:21
поделиться
Другие вопросы по тегам:

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