2010-11-18 39 views
9

Tôi có hai lớp, nói Group và Person với một ManyToMany-Relation được ánh xạ trong một JoinTable.JPA/Hibernate: ManyToMany xóa quan hệ

Nếu tôi xóa một người có quan hệ với một nhóm, tôi muốn xóa mục nhập khỏi bảng kết nối (không xóa chính nhóm đó!).

Làm cách nào để xác định các chú thích xếp tầng? Tôi không tìm thấy một tài liệu thực sự hữu ích nhưng một số cuộc thảo luận ban chưa được giải quyết ...

public class Group { 
    @ManyToMany(
     cascade = { javax.persistence.CascadeType.? }, 
     fetch = FetchType.EAGER) 
    @Cascade({CascadeType.?}) 
    @JoinTable(name = "PERSON_GROUP", 
     joinColumns = { @JoinColumn(name = "GROUP_ID") }, 
     inverseJoinColumns = { @JoinColumn(name = "PERSON_ID") }) 
    private List<Person> persons;  
} 

public class Person { 
    @ManyToMany(
     cascade = { javax.persistence.CascadeType.? }, 
     fetch = FetchType.EAGER, 
     mappedBy = "persons", 
     targetEntity = Group.class) 
    @Cascade({CascadeType.?}) 
    private List<Group> group; 
} 

Trả lời

0

Tôi tin rằng những gì bạn muốn là:

cascade = CascadeType.ALL 

Để loại bỏ các mối quan hệ DB, loại bỏ hiệp hội từ mỗi nhóm . Xóa người đó khỏi bộ sưu tập Group.persons và xóa Group khỏi bộ sưu tập Person.group, sau đó tiếp tục tồn tại đối tượng người của bạn.

+0

Tôi muốn xóa liên kết tự động khi xóa đối tượng người. Ý định của tôi là không phải làm điều này bằng tay. Nếu tôi phải làm vậy, tôi không cần phải xếp tầng. Hoặc tôi đã có được tính năng Cascading-sai? – tautologe

+0

Bạn phải làm như vậy. Cascading không làm điều này. –

3

Cascade sẽ không xóa các tham chiếu còn sót lại thành xóa Person vẫn còn trên đối tượng Group trong bộ nhớ. Bạn phải làm điều đó bằng tay. Có vẻ như thác nước nên làm điều này, nhưng thật đáng buồn đó không phải là cách nó hoạt động.

Dựa trên thông tin được cung cấp trong câu hỏi của bạn, tôi không nghĩ bạn cần bất kỳ tùy chọn xếp tầng nào được đặt trên các đối tượng Person hoặc Group của mình. Nó không có vẻ giống như họ chia sẻ một mối quan hệ cha/con mà sự tồn tại của một phụ thuộc vào khác. Đó là loại mối quan hệ mà tôi mong đợi để xem một số tùy chọn thác.

+0

hmm ok, cảm ơn. btw. là có bất cứ nơi nào một tài liệu có thể sử dụng của tầng và làm thế nào để kết hợp các chú thích jpa và hibernate một cách hợp lý? – tautologe

+0

Tôi sử dụng Hibernate như một nhà cung cấp nhưng tôi chỉ tương tác với nó thông qua giao diện JPA. Tôi không phải là người thích hợp để trả lời các câu hỏi về chú thích đặc trưng của Hibernate. Lấy làm tiếc. –

0

Bạn có thể làm điều đó trên cơ sở dữ liệu cụ thể (phụ thuộc vào cơ sở dữ liệu của bạn và khả năng của nó). Bằng cách thêm "on delete cascade" vào khóa ngoài của bảng quan hệ.

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