cacade删除操作在hibernate中没有按预期工作

pra*_*nay 3 hibernate cascade

我尝试实现cascaded ="delete",如下所示,但只有员工行被删除而不是相应的工资行.Employee pojo类是:

public class Employee {
int empid;
String ename;
Salary sal;
//gettrs and setters
Run Code Online (Sandbox Code Playgroud)

工资pojo类是:

public class Salary {
int sid;
double netsal;
Employee employee;
    //getters and setters
Run Code Online (Sandbox Code Playgroud)

employee.hbm文件是:

<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>
Run Code Online (Sandbox Code Playgroud)

salary.hbm文件是:

<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>
Run Code Online (Sandbox Code Playgroud)

并创建相应的mysql表:

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));
Run Code Online (Sandbox Code Playgroud)

插入记录之后:

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();
Run Code Online (Sandbox Code Playgroud)

当我做

Query query = session.createQuery("delete from employee e where e.empid=12");
    query.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

然后删除employee表中的条目,但工资表中的相应条目仍然存在.那么我如何确保相应的工资条目也被删除?谢谢.

JB *_*zet 10

使用DML样式删除查询删除实体时,级联不起作用.仅当您使用会话删除员工时,它才会起作用:

Employee e = (Employee) session.load(Employee.class, 12);
session.delete(e);
Run Code Online (Sandbox Code Playgroud)