2010-05-18 2 views
7

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

Однако, похоже, что спящий режим правильно добавляет Cascade к ссылкам в таблице. Однако это работает, когда я, например, удаляю строку, и у меня есть каскад delete как аннотация hibernate. Поэтому я предполагаю, что это означает, что 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

ответ

5

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

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