У меня возникают проблемы с удалением сиротских узлов с помощью JPA со следующим сопоставлением
@OneToMany (cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "owner")
private List<Bikes> bikes;
У меня проблема с потерянными ролями, висящими в базе данных.
Я могу использовать org.hibernate.annotations.Cascade
специальный тег аннотации Hibernate, но, очевидно, я не хочу связывать свое решение с реализацией Hibernate.
РЕДАКТИРОВАТЬ : Кажется, JPA 2.0 будет поддерживать это.
Если вы используете JPA 2.0, теперь вы можете использовать
orphanRemoval=true
атрибут@xxxToMany
аннотации для удаления сирот.Фактически,
CascadeType.DELETE_ORPHAN
устарел в 3.5.2-Final.источник
источник
cascade = CascadeType.ALL, orphanRemoval = false
удалю родительский элемент? Удалит ли он детей, хотя я специально сказал НЕ делать этого?Если вы используете JPA с EclipseLink, вам нужно будет установить аннотацию @PrivateOwned .
Документация: Eclipse Wiki - Использование расширений EclipseLink JPA - Глава 1.4 Как использовать аннотацию @PrivateOwned
источник
вы можете использовать @PrivateOwned для удаления сирот, например
источник
Я просто нашел это решение, но в моем случае оно не работает:
orphanRemoval = true не действует.
источник
Согласно Java Persistence with Hibernate , каскадное удаление сиротства недоступно в виде аннотации JPA.
Это также не поддерживается в JPA XML.
источник
У меня была та же проблема, и я задавался вопросом, почему это условие ниже не удаляет сирот. Список блюд не был удален в Hibernate (5.0.3.Final), когда я выполнил именованный запрос на удаление:
Тогда я вспомнил, что я не должен использовать именованный запрос на удаление , но EntityManager. Поскольку я использовал
EntityManager.find(...)
метод для извлечения объекта, а затемEntityManager.remove(...)
для его удаления, также были удалены блюда.источник
Просто
@OneToMany(cascade = CascadeType.ALL, mappedBy = "xxx", fetch = FetchType.LAZY, orphanRemoval = true)
.Удалите targetEntity = MyClass.class , он отлично работает.
источник
Для записей в OpenJPA до JPA2 это был @ElementDependant.
источник
Я использовал сопоставление один в один, но дочерний элемент не удалялся. JPA давал нарушение внешнего ключа.
После использования orphanRemoval = true проблема была решена
источник