2012-11-22 24 views
9

Lúc đầu, tôi đã mong đợi rằng với CascadeType.REMOVE tôi sẽ có thể xóa các khóa ngoại trong bảng của tôi, nhưng tôi đã có ngoại lệ. Nhưng với @CascadeOnDelete thì được rồi. Sự khác biệt giữa hai chú thích là gì?Sự khác nhau giữa chú thích @CascadeOnDelete và CascadeType.REMOVE là gì?

CHỈNH SỬA: Tôi đã xem nhận xét của DataNucleus'.Cascade on delete xuất phát từ org.eclipse.persistence.annotations.CascadeOnDelete .Cách đặt câu hỏi về ý tưởng hay được sử dụng.

+1

Bạn đã nhận được ngoại lệ nào? – Ilya

+1

@CascadeOnDelete không phải là một phần của JPA, vì vậy đề nghị bạn đề cập đến nó ở đâu từ – DataNucleus

+1

ngoại lệ là: 'DELETE trên bảng' XXX 'gây ra vi phạm ràng buộc khóa ngoài' YYY 'cho khóa (xxx). Tuyên bố đã được khôi phục.' – npocmaka

Trả lời

6

Khi bạn sử dụng CascadeType.Remove tại thời điểm tầng sẽ được xử lý bởi công cụ ORM nhưng khi bạn muốn tầng được xử lý bởi cơ sở dữ liệu bạn có thể sử dụng @ CascadeOnDelete.but khi bạn đang sử dụng @CascadeOnDelete, hãy đảm bảo Cơ sở dữ liệu bạn đang sử dụng nên hỗ trợ tầng.

+0

Thanks.This có nghĩa là tốt hơn để tránh CascadeOnDelete nếu nó có thể .... – npocmaka

+3

Nó phụ thuộc vào cách bạn đang sử dụng nó. Nếu bạn muốn mã của bạn được tuân thủ nghiêm ngặt với đặc điểm kỹ thuật JPA thì bạn không nên sử dụng CascadeOnDelete.But nếu bạn chắc chắn rằng nếu không thay đổi nhà cung cấp JPA của bạn thì có thể hữu ích khi sử dụng CascadeonDelete. Để biết thêm thông tin, bạn có thể tham khảo [link] (http://wiki.eclipse.org/EclipseLink/Examples/JPA/DeleteCascade) –

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