Java 休眠删除父级而不删除子级
大家好,请解释一下如何通过删除子对象来删除父对象。例如,当我有一个名为Class和Student的实体时。这里的父对象是Class,子对象是Student。我想在Hibernate中删除父对象(Class),但不删除子对象作为Student ClassEntityJava 休眠删除父级而不删除子级,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
/*
* 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 + " ]";
}
}