Hibernate: проблема с аннотацией OnDelete - PullRequest
0 голосов
/ 18 мая 2011

Здравствуйте. У меня есть следующие две сущности

@Entity
public class DocumentCollection {
  @Id
  @GeneratedValue
  private Long id;
  @OneToMany(targetEntity=Document.class,mappedBy="documentCollection",cascade=javax.persistence.CascadeType.ALL)
@OnDelete(action = OnDeleteAction.CASCADE)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
  private Set<Document> documents;
 ...
}

И:

@Entity
public class Document {
  @Id
  @GeneratedValue
  private Long id;

  @ManyToOne
  private DocumentCollection documentCollection;
  ...
}

При удалении DocumentCollection все документы, на которые есть ссылки, также должны быть удалены.Но я получаю эту ошибку:

Cannot delete or update a parent row: a foreign key constraint fails (`tms_db`.`document`, CONSTRAINT `FK3737353BEB85533C` FOREIGN KEY (`documentCollection_id`) REFERENCES `documentcollection` (`id`))

Я также попытался поместить аннотацию @OnDelete в класс документа, но не сработал.Так чего мне не хватает?К вашему сведению, я использую Hibernate 3.6.0.Final.

ОБНОВЛЕНИЕ: Я сделал дамп схемы mysql и заметил, что в схеме таблицы документов нет оператора ON DELETE CASCADE.Hibernate генерирует только ограничения внешнего ключа, что приводит к указанной ошибке.У кого-нибудь есть идея, почему hibernate НЕ генерирует оператор «ON DELETE CASCADE»?

Надеюсь, кто-нибудь может мне помочь, спасибо

1 Ответ

3 голосов
/ 18 мая 2011

@OnDelete аннотация влияет на способ, которым Hibernate генерирует схему базы данных. Если ваша схема не была сгенерирована Hibernate или не была обновлена ​​после добавления этой аннотации, она не будет работать правильно.

Если вы хотите использовать схему базы данных, созданную вручную с @OnDelete(action = OnDeleteAction.CASCADE), вы должны вручную определить ограничение внешнего ключа в своей схеме как on delete cascade.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...