У меня очень простой однонаправленный @OneToMany из родительского объекта в список детей с CascadeType.ALL. Как правильно удалить и удалить одного из детей?Hibernate Как правильно удалить детей в @OneToMany?
Просто позвоните remove (child) в List, а затем session.saveOrUpdate (родительский), конечно, не работает, и ребенок не будет удален в базе данных, если я не укажу удаление сирот.
В качестве альтернативы удалению сирот было бы правильным, если бы я session.delete (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();
}
}
На самом деле, мой главный вопрос: как мне это сделать вручную, без DELETE_ORPHAN? – karrjin
Извините, но почему вы сделали это вручную? – leozin
Я пытаюсь понять это лучше. – karrjin