2010-05-18 28 views
7

Tôi có một tập hợp hibernate.hbm2ddl.auto để tạo ra để Hibernate tạo các bảng trong mysql cho tôi.Hibernate không tạo ra cascade

Tuy nhiên, có vẻ như hibernate không chính xác thêm Cascade vào các tham chiếu trong bảng. Tuy nhiên nó làm việc khi tôi ví dụ xóa một hàng, và tôi có một thác xóa như chú thích ngủ đông. Vì vậy, tôi đoán rằng có nghĩa là Hibernate lần đọc các annoation trên thời gian chạy, và thực hiện cascading bằng tay?

Hành vi đó có bình thường không?

Ví dụ:

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

Ở đây tôi đã thiết thác cho TẤT CẢ. Tuy nhiên, khi chạy 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 | 

Nó không nói bất cứ điều gì về tầng thứ khác rồi khóa ngoài. Theo tôi, nó cần phải có thêm các ON DELETE CASCADE ON DELETE UPDATE

Trả lời

5

Các định nghĩa CascadeType@Cascadekhông dịch sang DDL, họ nói cho Hibernate cách cư xử khi một hoạt động được thực hiện.

Tuy nhiên, có @OnDelete mà bạn có thể sử dụng trên cấp độ gốc để tạo khóa ngoài được tạo với điều kiện thích hợp trên mệnh đề xóa tầng.

Các vấn đề liên quan