Удалить объект JPA не удается из-за ограничений внешнего ключа? - PullRequest
12 голосов
/ 02 сентября 2010

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

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>();
}

1 Ответ

13 голосов
/ 02 сентября 2010

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

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

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

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

...

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

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

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

Я предлагаю поднять проблему.

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

...