我有以下对象结构:
public class Entity1 {
@OneToMany(orphanRemoval=true)
private List<Entity2> listOfEntitys;
...
}
public class Entity2 {
@OneToMany(orphanRemoval=true)
private List<Entity3> listOfEntitys;
...
}
public class Entity3 {
...
}
//Here it can be thousand of it for one entity3
public class Entity4 {
@ManyToOne
private Entity3 entity;
...
}
现在,我想要删除Entity1
,所有实体也应该在级联上删除。
问题是,...如何删除级联中的所有entitys4
?
我尝试了两种解决方案:
我在entity3上添加一个列表并在级联中删除它。
我提出了两个问题:首先,我选择了entitys3
中的所有entity1
- &gt; entity2
比我删除所有entitys4
。之后我可以逐级删除entity1/2/3
,因为从4
到3
的实体引用会被删除。
给它另一个解决方案?我更喜欢哪种解决方案?
答案 0 :(得分:0)
我更喜欢第一个解决方案但略有修改:
@Entity
public class Entity1 {
@OneToMany(mappedBy = "entity1", orphanRemoval = true)
private List<Entity2> listofentitys;
}
@Entity
public class Entity2 {
@ManyToOne
private Entity1 entity1;
@OneToMany(mappedBy = "entity2", orphanRemoval = true)
private List<Entity3> listofentitys;
}
@Entity
public class Entity3 {
@ManyToOne
private Entity2 entity2;
@OneToMany(mappedBy="entity3", orphanRemoval = true)
private List<Entity4> listofentitys;
}
@Entity
public class Entity4 {
@ManyToOne
private Entity3 entity3;
}
通过在实体之间引入双向关系,您可以避免连接表,从而在与底层数据库交换数据时提高整体性能。这种方法对我来说似乎比第二种方法更合理,因为JPA隐含地处理了所有事情。
删除实体可能如下所示:
public <T> void remove(Class<T> clazz, int id) {
T entity = em.find(clazz, id);
if (entity != null) {
em.remove(entity);
}
}
我希望它有所帮助。