Sto usando Hibernate 3.0 con Java.Come cancellare una riga e tutti i suoi riferimenti dal database tramite Hibernate?
Ho le seguenti classi.
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 contiene mappature per id & studentName proprietà.
problema che sto affrontando è:
ho eliminare una riga da student_master tramite Hibernate.
Student stu = new Student();
stu.setId(1l);
session.delete(stu);
transaction.commit();
Ma i riferimenti del eliminata studente (id = 1) non vengono cancellati dalle tabelle teacher_student_master e subject_student_master.
Come posso risolvere questo problema?
Nota: Sarebbe bello se riuscissi a risolvere questo problema eseguendo una sorta di configurazione con Hibernate invece di codificare l'attivazione della query &.
Modifica: ho visto questo link. Ma in questo, si dice che ho bisogno di fare un po 'di codifica, in primo luogo ottenere tutti gli insegnanti associati a student = 1, quindi rimuovere lo studente = 1 dall'elenco dello studente & quindi aggiornare l'insegnante. Voglio evitare questa codifica. È possibile?
@RAS sta usando mapping XML, non annotazioni. Sarebbe meglio se fornissi la risposta usando solo la mappatura HBM. –
Ho visto entrambi i link dati da te. Ma in entrambi i link, è stato detto che ho bisogno di fare un po 'di codice, in primo luogo ottenere tutti gli insegnanti associati a studenti = 1, quindi rimuovere lo studente = 1 dall'elenco degli studenti e quindi aggiornare l'insegnante. Voglio evitare questa codifica. È possibile? – RAS
Bene, supponiamo di avere le seguenti tabelle: Studente, Insegnante e Corso (che collega Studente e Insegnante). Utilizzando DELETE_ORPHAN sul riferimento dello studente al corso, eliminando lo studente = 1 verranno eliminati anche tutti i corsi che hanno una relazione con questo studente. Non devi recuperare tutti i corsi ed eliminarli manualmente, Hibernate lo farà per te. – Thiago