Подтвердить что ты не робот

Удаление объекта JPA не выполняется из-за ограничений внешнего ключа?

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

Query query=em.createQuery("DELETE FROM Person");
query.executeUpdate();
em.getTransaction().commit();

Я считаю, что причиной нарушения является проблема с полем activationKey:

2029 [main] ERROR org.hibernate.util.JDBCExceptionReporter - integrity
constraint violation: foreign key no action; FKCEC6E942485388AB
table: ACTIVATION_KEY

Это то, что у меня есть сейчас:

@Entity
@Table(name="person")
public class Person implements Comparable<Person> {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="id")
    private long id = 0;

    @ElementCollection
    @Column(name = "activation_key")
    @CollectionTable(name = "activation_key")
    private Set<String> activationKey = new HashSet<String>();
}
4b9b3361

Ответ 1

Почему следующий запрос завершился с ошибкой из-за ограничения внешнего ключа?

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

И хотя спецификация JPA явно пишет, что массовое удаление не привязано к связанным объектам:

4.10 Операции массового обновления и удаления

...

Операция удаления применяется только к объекты указанного класса и его подклассов. Он не каскадирует связанных с ними.

Это не совсем ваше дело, и я думаю, что то, что вы хотите сделать, должно поддерживаться.

Вероятно, вы сталкиваетесь с одним из ограничений удаления Hibernate, например:

Я предлагаю подняться.

Обходной путь: используйте собственные запросы для удаления таблицы коллекции, а затем таблицы сущностей.