Tôi đang sử dụng Hibernate 3.0 với Java.Làm thế nào để xóa một hàng và tất cả các tham chiếu của nó từ cơ sở dữ liệu thông qua Hibernate?
Tôi có các lớp sau đây.
Teacher.java
private long id;
private String teacherName;
private List<Student> students;
// getter-setter of all
Subject.java
private long id;
private String subjectName;
private List<Student> students;
// getter-setter of all
Student.java
private long id;
private String studentName;
// getter-setter of both
Teacher.hbm.xml
<class name="Teacher" table="teacher_master">
<!--other mappings-->
<list name="students" cascade="refresh" table="teacher_student_master">
<key column="teacher_id"/>
<index column="student_teacher_position" type="integer"/>
<many-to-many class="Student" column="student_id"/>
</list>
</class>
Subject.hbm.xml
<class name="Subject" table="subject_master">
<!--other mappings-->
<list name="students" cascade="refresh" table="subject_student_master">
<key column="subject_id"/>
<index column="student_subject_position" type="integer"/>
<many-to-many class="Student" column="student_id"/>
</list>
</class>
Student.hbm.xml chứa ánh xạ cho id & studentName tài sản.
Vấn đề tôi phải đối mặt là:
tôi xóa một hàng từ student_master qua Hibernate.
Student stu = new Student();
stu.setId(1l);
session.delete(stu);
transaction.commit();
Nhưng tài liệu tham khảo của xóa sinh viên (id = 1) không bị xóa từ các bảng teacher_student_master và subject_student_master.
Làm cách nào để khắc phục sự cố này?
Lưu ý: Sẽ rất tuyệt nếu tôi có thể khắc phục sự cố này bằng cách thực hiện một số loại cấu hình với Hibernate thay vì mã hóa kích hoạt truy vấn &.
Chỉnh sửa: Tôi đã nhìn thấy điều này link. Nhưng trong đó, nó được đề cập rằng tôi cần phải làm một số mã như thế, đầu tiên nhận được tất cả các giáo viên liên kết với sinh viên = 1, sau đó loại bỏ học sinh = 1 từ danh sách sinh viên & rồi cập nhật giáo viên. Tôi muốn tránh mã hóa này. Có thể không?
@RAS đang sử dụng bản đồ XML, không chú thích. Sẽ tốt hơn nếu bạn cung cấp câu trả lời chỉ sử dụng bản đồ HBM. –
Tôi đã nhìn thấy cả hai liên kết do bạn đưa ra. Nhưng trong cả hai liên kết, nó được đề cập rằng tôi cần phải làm một số mã như thế, đầu tiên nhận được tất cả các giáo viên liên kết với sinh viên = 1, sau đó loại bỏ học sinh = 1 từ danh sách sinh viên và sau đó cập nhật giáo viên. Tôi muốn tránh mã hóa này. Có thể không? – RAS
Vâng, giả sử bạn có các bảng sau: Sinh viên, Giáo viên và Khóa học (liên kết Sinh viên và Giáo viên). Bằng cách sử dụng DELETE_ORPHAN về tham chiếu của Học sinh đối với Khóa học, việc xóa học sinh = 1 cũng sẽ xóa tất cả các khóa học có mối quan hệ với sinh viên này. Bạn không cần phải lấy tất cả các khóa học và xóa chúng bằng tay, Hibernate sẽ làm điều đó cho bạn. – Thiago