【发布时间】:2014-10-23 15:59:20
【问题描述】:
我有一个非常简单的单向@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();
}
}
【问题讨论】:
标签: java hibernate hibernate-onetomany