Здравствуйте, LDimas, Вы писали:
LD>Хочу чтобы при удалении категории все ее подкатегории тоже удалялись.
LD>Но когда вызываю в DAO
LD>LD> sessionFactory.getCurrentSession().delete(category);
LD> sessionFactory.getCurrentSession().flush();
LD>
LD>удаляется только сама категория, а не подкатегории.
LD>Почему CascadeType.REMOVE не помогает? Что я не так делаю?
Я набросал тест, с Вашим маппингом на самом деле все работает, дочерние категории удаляются. Может Вы не совсем правильно создаете объекты, и забываете добавить,
например, child.setParent(parent), когда добавляете child в список у Parent?
package test;
import junit.framework.TestCase;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.AnnotationConfiguration;
public class TestCategory extends TestCase {
public void testRemove() {
SessionFactory factory = new AnnotationConfiguration().configure().buildSessionFactory();
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Category parent = new Category();
Category child = new Category();
parent.getChilds().add(child);
child.setParent(parent);
session.saveOrUpdate(child);
session.saveOrUpdate(parent);
session.flush();
tx.commit();
session.clear();
assertEquals(2L, getCategoriesCount(session));
tx.begin();
session.delete(parent);
session.flush();
tx.commit();
session.clear();
assertEquals(0L, getCategoriesCount(session));
}
private long getCategoriesCount(Session session) {
return (Long) session.createQuery("select count(*) from test.Category").uniqueResult();
}
}