Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠删除父级而不删除子级_Java_Hibernate_Hibernate Mapping - Fatal编程技术网

Java 休眠删除父级而不删除子级

Java 休眠删除父级而不删除子级,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,大家好,请解释一下如何通过删除子对象来删除父对象。例如,当我有一个名为Class和Student的实体时。这里的父对象是Class,子对象是Student。我想在Hibernate中删除父对象(Class),但不删除子对象作为Student ClassEntity /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.myapp

大家好,请解释一下如何通过删除子对象来删除父对象。例如,当我有一个名为Class和Student的实体时。这里的父对象是Class,子对象是Student。我想在Hibernate中删除父对象(Class),但不删除子对象作为Student

ClassEntity

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.myapp.struts;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

/**
 *
 * @author hyva
 */
@Entity
public class Calss implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    @OneToMany
    @Cascade(CascadeType.ALL)   
    @JoinColumn(name = "CalssId")        
    private Set<Student> student = new HashSet();

    public boolean addstudent(Student s){
    return student.add(s);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Calss)) {
            return false;
        }
        Calss other = (Calss) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.myapp.struts.Calss[ id=" + id + " ]";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Set<Student> getStudent() {
        return student;
    }

    public void setStudent(Set<Student> student) {
        this.student = student;
    }



}

对象具有不同类型的关联。例如,组合关联,其中其将是父对象,并将控制一个或多个子/从属对象。依赖对象没有自己的生命周期和标识,没有父对象,它无法单独存在。

无论对父对象进行了什么修改,例如创建、更新、删除,并且假定对子对象也进行了修改。例如,如果我正在删除父对象,则删除不应仅发生在父对象上,而应同时删除所有子对象,因为这些子对象的生命周期完全取决于父对象。他们在JPA和Hibernate中使用了一种称为cascade的策略来实施这种方法

回到你的问题上来。我假设Employee是您的家长,phone是它的子类。不删除phone/child对象没有任何意义。这实际上打破了对象之间的关联方法

仍然可以通过执行HQL或本机SQL要求来完成任务,但不建议这样做。


希望这是有帮助的

嗨,有人能帮我吗?你能在这里分享你的地图详细信息吗?嗨,我在这里发布了两个实体的一名员工和电话号码,我需要的是我删除员工我不想删除电话号码。是的,好的,当我当时没有为员工和电话使用两个实体时,你的回答是有意义的。我需要使用嵌入式作为我的电话实体,这样就不会有自己的生命周期。电话号码取决于员工。但在我的情况下,我为此创建了两个实体。这两个实体有自己的生命周期。我说的对吗?Rit。是否有任何具体的设计决定,以保持电话号码单独活着?我的观点是他们应该用一种方式来识别电话号码是属于一个人的。在没有所有者(员工)的情况下激活电话号码对我来说没有意义。那没有意义好的。我已经更新了我的代码,以新设计的类实体和学生实体。如果我删除该类,学生应该仍然活着。删除该类时删除该学生对我来说没有意义。谢谢你的重播。是的,你的权利。在这种情况下,您的设计看起来非常完美。现在,您正在关联两个实体(对象有自己的生命周期)…在上一篇文章中,您尝试在实体和值类型之间建立关联(对象没有自己的生命周期)。。。希望您已经理解了这两种情况之间的区别。如果你明确了你想要问的问题,请关闭线程。。谢谢我不明白如何通过将子对象设为空引用来删除父对象。
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.myapp.struts;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 *
 * @author hyva
 */
@Entity
public class Student implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String studentname;
    private String age;

    public String getStudentname() {
        return studentname;
    }

    public void setStudentname(String studentname) {
        this.studentname = studentname;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Student)) {
            return false;
        }
        Student other = (Student) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.myapp.struts.Student[ id=" + id + " ]";
    }

}