Hibernate не генерирует каскад - PullRequest
8 голосов
/ 18 мая 2010

У меня есть набор hibernate.hbm2ddl.auto для создания, чтобы Hibernate создавал таблицы в mysql для меня.

Однако, похоже, что hibernate правильно не добавляет Cascade к ссылкам в таблице. Однако это работает, когда я, например, удаляю строку, и у меня есть каскад удаления в виде спящего аннотации . Поэтому я предполагаю, что это означает, что Hibernate читает аннотацию во время выполнения и выполняет каскадирование вручную?

Это нормальное поведение?

Например:

@Entity
class Report {
    @OneToOne(cascade = CascadeType.ALL)
    public File getPdf() {
    return pdf;
}
}

Здесь я установил каскад на ВСЕ. Однако при работе show create table Report

Report | CREATE TABLE `Report` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `pdf_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK91B14154FDE6543A` (`pdf_id`),
  CONSTRAINT `FK91B14154FDE6543A` FOREIGN KEY (`pdf_id`) REFERENCES `File` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

В нем ничего не говорится о каскадировании, кроме внешнего ключа. На мой взгляд, он должен был добавить ON DELETE CASCADE ON DELETE UPDATE

1 Ответ

6 голосов
/ 18 мая 2010

Определения CascadeType и @Cascade не переведены в DDL, они сообщают Hibernate, как вести себя при выполнении операции.

Однако существует @OnDelete, который можно использовать в родительском элементе для получения внешнего ключа, созданного с соответствующим предложением каскадного удаления.

...