Tôi đã thừa hưởng một cơ sở mã mà gần như tất cả các mối quan hệ có các chú thích như sau:Dòng thác của JPA = REMOVE và Hibernate's @OnDelete được sử dụng cùng nhau?
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "someThing")
@OnDelete(action = OnDeleteAction.CASCADE)
Bây giờ tôi đang gặp rắc rối hiểu biết những gì @OnDelete
không ở nơi đầu tiên. Hibernate: OnDelete vs cascade=CascadeType.REMOVE thật thú vị, nhưng tiếc là không có bất kỳ câu trả lời nào và JavaDoc cho @OnDelete
đặc biệt vô giá trị.
Từ các câu hỏi khác có vẻ như chú thích OnDelete bằng cách nào đó cho phép DB thực hiện xếp tầng, trong khi chỉ thị xếp tầng trên @OneToMany
hãy để ORM làm điều đó, nhưng mục đích sử dụng chúng là gì?
Và chỉ thị thác tầng của @OneToMany
thực sự không cho phép triển khai ORM tạo ra một chuỗi dựa trên DB không?
Các hành vi với một '@ OneToOne' và' @ OneToMany' dường như không được khá giống nhau. Với '@OneToMany (...) @OnDelete (action = OnDeleteAction.CASCADE) Object doors', có vẻ như việc xóa nhà xóa tất cả các cửa của nó, nhưng việc xóa một cánh cửa sẽ không xóa nhà. – Bruno
Nó sẽ phải là '@OneToMany List
Không đồng ý. Tôi nghĩ sự khác biệt lớn nhất giữa '' 'CascadeType.REMOVE''' và' '' @ OnDelete''' trong khung nhìn của người dùng là '' '@ OnDelete''' có thể làm việc với JPAQL (vì nó dựa trên DB cascade), nhưng '' 'CascadeType.REMOVE''' không thể làm việc với JPAQL. – okwap