Hibernate 删除父对象时,子对象正在更新而不是删除

Hibernate 删除父对象时,子对象正在更新而不是删除,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我的问题是,当我删除父级子级而不是删除子级时,子级正在更新 这是输出 Hibernate: update employee_project set employeeNumber=null where employeeNumber=? Hibernate: delete from employee where EMPLOYEE_NUMBER=? 当我删除父级时,这是我运行的代码片段 public boolean deleteEmployee(Employee employee) {

我的问题是,当我删除父级子级而不是删除子级时,子级正在更新 这是输出

Hibernate: update employee_project set employeeNumber=null where employeeNumber=?
Hibernate: delete from employee where EMPLOYEE_NUMBER=?
当我删除父级时,这是我运行的代码片段

 public boolean deleteEmployee(Employee employee) {
        Transaction transaction = null;
        boolean flag;
        try {
            transaction = session.beginTransaction();
            session.delete(employee);
            session.flush();
            transaction.commit();
            flag = true;
        } catch (HibernateException exception) {
            if (transaction != null)
                transaction.rollback();
            flag = false;
        }
        return flag;
    }
这是我的父表Employee.hbm.xml


此类包含员工详细信息
这是子表project.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.nousinfo.tutorial.model">
    <class name="EmployeeProject" table="employee_project">
        <meta attribute="class-description">
            This class contains the employee detail
        </meta>
        <composite-id>
            <key-property name="employeeNumber" type="int"
                column="EMPLOYEE_NUMBER"></key-property>
            <key-property name="projectCode" type="string" column="PROJECT_CODE"></key-property>
        </composite-id>
        <property name="startDate" type="date" column="START_DATE"></property>

        <many-to-one name="employee" class="com.ravindrainfo.tutorial.model.Employee"></many-to-one>
    </class>
</hibernate-mapping>

此类包含员工详细信息
这是我的员工波乔

import java.io.Serializable;
import java.util.Date;

import java.util.Set;

public class Employee implements Serializable {

    private static final long serialVersionUID = 4314638638373270669L;
    private int employeeNumber;
    private String firstName;
    private String lastName;
        private Set<EmployeeProject> employeeProjects;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
        public Set<EmployeeProject> getEmployeeProjects() {
        return employeeProjects;
    }

    public void setEmployeeProjects(Set<EmployeeProject> employeeProjects) {
        this.employeeProjects = employeeProjects;
    }
        public int getEmployeeNumber() {
        return employeeNumber;
    }

    public void setEmployeeNumber(int employeeNumber) {
        this.employeeNumber = employeeNumber;
    }

}
import java.io.Serializable;
导入java.util.Date;
导入java.util.Set;
公共类Employee实现了可序列化{
私有静态最终长serialVersionUID=4314638373270669L;
私人国际雇员人数;
私有字符串名;
私有字符串lastName;
私人设置员工项目;
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共集getEmployeeProjects(){
返回员工项目;
}
公共作废setEmployeeProjects(Set employeeProjects){
this.employeeProjects=employeeProjects;
}
public int getEmployeeNumber(){
返回员工编号;
}
公共无效setEmployeeNumber(int employeeNumber){
this.employeeNumber=employeeNumber;
}
}

我不确定这是否也适用于xml,但请尝试修改

<set name="employeeProjects" cascade="all-delete-orphan">
      <key column="employeeNumber" />
      <one-to-many class="com.ravindrainfo.tutorial.model.EmployeeProject" />
</set>

我认为级联应该是全部删除孤立项,而不是全部删除孤立项

hibernate文档的摘录:

如果子对象的寿命受对象的寿命限制 父对象,通过指定 cascade=“全部,删除孤立项”(@OneToMany(cascade=CascadeType.all, (删除=真)


ref:

我的XML中不支持孤立删除元素,如果您有其他解决方案,请在我的pojo类中提供我和另一个问题,我没有覆盖equals()和hashCode(),这有什么区别吗?不应该。Hibernate发出查询
updateemployee\u项目集employeeNumber=null,其中employeeNumber=?
,以便查看级联。看看下面的例子,您的示例实际上应该如您所期望的那样工作,但是尝试将
cascade=“all delete orphan”
修改为
cascade=“delete orphan”
。对不起,我正在尝试从内存中恢复,我很久没有使用xml了!我已尝试全部,全部删除孤立项,删除孤立项,全部,删除孤立项,所有,删除孤立项都不起作用同一问题正在发生父项已删除但子项未删除其更新已编辑我的答案。让我知道如果这项工作,我真的没有其他想法!我已经尝试过这个反向=“true”,但当我这样做时,在控制台中仅从employee中删除,其中employee_NUMBER=?“显示”和“父项”已删除,但“子项”未删除到目前为止您尝试了哪些操作?你应该改变标签,让更多合适的人回答你的问题。标记的一个好主意是你正在使用的语言的名称。@ProfPickle我又添加了一个标记谢谢你的建议实际上这是我第一次问这个问题这就是为什么我不知道会存在同样的问题孩子正在更新和它的全部,删除孤儿你的拼写是错误的,我想:-p你的拼写是对的-为了一致性,我修正了它,但现在我不知道它不起作用的原因。。。
<set name="employeeProjects" cascade="all-delete-orphan">
      <key column="employeeNumber" />
      <one-to-many class="com.ravindrainfo.tutorial.model.EmployeeProject" />
</set>
<set name="employeeProjects" cascade="all-delete-orphan" orphanRemoval="true">
      <key column="employeeNumber" />
      <one-to-many class="com.ravindrainfo.tutorial.model.EmployeeProject" />
</set>
<set name="employeeProjects" cascade="all-delete-orphan" inverse="true">
    <key column="employeeNumber" />
    <one-to-many class="com.ravindrainfo.tutorial.model.EmployeeProject" />
</set>