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

StackOverflow https://stackoverflow.com/questions/3627674

Вопрос

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

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>();
}
Это было полезно?

Решение

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

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

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

4.10 Обновление Обновления и удаление

...

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

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

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

Я предлагаю повысить проблему.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top