Ich habe versucht, cascaded="delete" wie folgt zu implementieren, aber nur die Mitarbeiterzeile wird gelöscht und nicht die entsprechende Gehaltszeile. Die Klasse Employee pojo ist :
public class Employee {
int empid;
String ename;
Salary sal;
//gettrs and setters
Die Gehaltsklasse pojo ist :
public class Salary {
int sid;
double netsal;
Employee employee;
//getters and setters
die Datei employee.hbm lautet :
<hibernate-mapping>
<class name="employee.Employee" table="EMPLOYEE">
<id name="empid" type="int">
<column name="EMPID" />
<generator class="assigned" />
</id>
<property name="ename" type="java.lang.String">
<column name="ENAME" />
</property>
<many-to-one name="sal" class="employee.Salary" cascade="delete">
<column name="sid" />
</many-to-one>
</class>
die Datei salary.hbm ist:
<hibernate-mapping>
<class name="employee.Salary" table="SALARY">
<id name="sid" type="int">
<column name="sid" />
<generator class="increment" />
</id>
<property name="netsal" type="double">
<column name="netsal" />
</property>
</class>
und die entsprechenden mysql-Tabellen werden wie folgt erstellt:
create table employee(EMPID int(5) primary key,ENAME varchar(20),sid int(5),foreign key(sid) references salary(sid));
create table salary(sid int(5) primary key,netsal int(5));
nach dem Einfügen von Datensätzen wie:
SessionFactory sf= new Configuration().configure().buildSessionFactory();
session= sf.openSession();
Transaction tx= session.beginTransaction();
Employee emp=new Employee();
emp.setEmpid(12);
emp.setEname("some name");
Salary sal=new Salary();
sal.setNetsal(12000);
emp.setSal(sal);
sal.setEmployee(emp);
tx.commit();
session.flush();
session.close();
wenn ich es tue
Query query = session.createQuery("delete from employee e where e.empid=12");
query.executeUpdate();
Dann wird der Eintrag in der Mitarbeitertabelle gelöscht, aber der entsprechende Eintrag in der Gehaltstabelle bleibt bestehen, wie kann ich also sicherstellen, dass der entsprechende Gehaltseintrag ebenfalls gelöscht wird? Danke!