我有一个非常简单的单向@OneToMany,从父对象到 CascadeType.ALL 的子对象列表。我将如何正确删除和删除其中一个孩子?
简单地调用 List 上的 remove(child) 然后 session.saveOrUpdate(parent) 当然不起作用,并且除非我指定孤儿删除,否则不会在数据库中删除子项。
作为孤立删除的替代方法,如果我 session.delete(child) 在数据库中删除它,然后从列表中删除(child) 然后我必须 session.refresh(parent) 所以我的父对象是否正确在内存中有正确的状态吗?
我将如何正确删除孩子并将其从数据库中删除而不进行孤立删除?
我目前正在我的 ParentDao 中考虑这个问题:
public void removeChild(Parent parent, Child child) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
session.beginTransaction();
session.delete(child);
session.getTransaction().commit();
parent.getChildren().remove(child);
session.refresh(parent);
} catch (RuntimeException e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
}