Java 休眠:删除子对象
我有以下POJO课程:Java 休眠:删除子对象,java,hibernate,Java,Hibernate,我有以下POJO课程: @Entity @Table(name = "category") public final class Category extends AbstractData<Category> { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer categoryID; @Column(name = "categoryName") p
@Entity
@Table(name = "category")
public final class Category extends AbstractData<Category>
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer categoryID;
@Column(name = "categoryName")
private String categoryName;
@Column(name = "categoryDescription")
private String categoryDescription;
@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name = "parentCategoryID", nullable = true)
private Category parentCategory;
@OneToMany(mappedBy = "parentCategory")
private Set<Category> subCategories;
@ManyToMany(cascade =
{ CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "categories")
private Set<Book> books;
public Category()
{
this("", "", null);
}
public Category(String name, String description)
{
this(name, description, null);
}
public Category(String name, String description, Category parent)
{
this.categoryName = name;
this.categoryDescription = description;
this.parentCategory = parent;
subCategories = new HashSet<Category>();
books = new HashSet<Book>();
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((categoryDescription == null) ? 0 : categoryDescription.hashCode());
result = prime * result + ((categoryName == null) ? 0 : categoryName.hashCode());
result = prime * result + ((parentCategory == null) ? 0 : parentCategory.hashCode());
return result;
}
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
Category other = (Category) obj;
if (categoryName == null)
{
if (other.categoryName != null) return false;
}
else if (!categoryName.equals(other.categoryName))
{
return false;
}
if (parentCategory == null)
{
if (other.parentCategory == null)
{
return true;
}
return false;
}
else
{
if (other.parentCategory != null)
{
return parentCategory.equals(other.parentCategory);
}
return false;
}
}
}
现在的问题是,在删除我的子对象时,我的父类别对象也会被删除
我哪里会错过要点
感谢是高级。您已将类型“全部”的级联设置为与父级的关联。当然,对子对象的删除操作会级联到父对象:
@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
private Category parentCategory;
从
@ManyToOne
中去掉级联
如果您想在删除父对象时删除子对象,请将
cascade=CascadeType.ALL
添加到@OneToMany
谢谢。这就解决了问题。现在,如果我想在删除父对象时删除子对象,我该怎么办?您需要指定@OneToMany(orphanRemoving=true)
@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
private Category parentCategory;