Giả sử tôi có hai thực thể: Nhóm và Người dùng. Mỗi người dùng có thể là thành viên của nhiều nhóm và mỗi nhóm có thể có nhiều người dùng.Làm thế nào để loại bỏ thực thể với mối quan hệ ManyToMany trong JPA (và tương ứng với các hàng của bảng)?
@Entity
public class User {
@ManyToMany
Set<Group> groups;
//...
}
@Entity
public class Group {
@ManyToMany(mappedBy="groups")
Set<User> users;
//...
}
Bây giờ tôi muốn xóa nhóm (giả sử nó có nhiều thành viên).
Vấn đề là khi tôi gọi EntityManager.remove() trên một số nhà cung cấp Group, JPA (trong trường hợp của tôi Hibernate) không loại bỏ các hàng từ bảng tham gia và xóa các hoạt động không do ép chính nước ngoài. Gọi remove() trên User hoạt động tốt (tôi đoán điều này có liên quan đến việc sở hữu một bên của mối quan hệ).
Vậy làm cách nào để xóa nhóm trong trường hợp này?
Cách duy nhất tôi có thể đưa ra là tải tất cả người dùng trong nhóm, sau đó cho mọi người dùng xóa nhóm hiện tại khỏi nhóm của mình và cập nhật người dùng. Nhưng nó có vẻ vô lý với tôi để gọi update() trên mỗi người dùng từ nhóm chỉ để có thể xóa nhóm này.
Thnx! Tôi đã có cùng một vấn đề và giải pháp của bạn giải quyết nó. Nhưng tôi phải biết nếu có một cách khác để giải quyết vấn đề này. Nó tạo ra một mã khủng khiếp. Tại sao nó không thể là _em.remove (thực thể) _ và đó là nó? –
Điều này có được tối ưu hóa đằng sau hậu trường không? Tôi không muốn truy vấn toàn bộ tập dữ liệu. – Ced
Đây là phương pháp thực sự tồi tệ, nếu bạn có hàng ngàn người dùng trong nhóm đó thì sao? – Serg