should all-delete-orphan work for both unidirectional and bidirectional (one2many association) ? is there any rule for this ..
I am trying to delete a child element using all-delete-orphan.... but getting following exception.. .
INFO: Checking 0 named queries Hibernate: select dept0_.id as id0_, dept0_.name as name1_0_ from dept dept0_ where dept0_.id=? Hibernate: select emp0_.deptid as deptid__, emp0_.id as id__, emp0_.id as id0_, emp0_.name as name0_0_, emp0_.deptid as deptid0_0_ from emp emp0_ where emp0_.deptid=? Exception in thread "main" java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(Unknown Source) at java.util.HashMap$KeyIterator.next(Unknown Source) at org.hibernate.collection.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:357) at Test.removeUser(Test.java:55) at Test.main(Test.java:66)
Below is my code :
<hibernate-mapping> <class name="Employee" table="emp"> <id name="empId" column="id"> <generator class="native"/> </id> <property name="empName" column="name"/> <many-to-one name="deptid" column="deptid"/> </class> </hibernate-mapping>
<hibernate-mapping> <class name="Dept" table="dept"> <id name="deptId" column="id"> <generator class="native"/> </id> <property name="deptName" column="name"/> <set name="emp" cascade="all-delete-orphan"> <key column="deptid"/> <one-to-many class="Employee"/> </set> </class> </hibernate-mapping>
Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); Dept dept=(Dept)session.load(Dept.class,new Integer(1)); Iterator<Employee> emps=((Set)dept.getEmp()).iterator(); while(emps.hasNext()){ Employee emp=emps.next(); if(emp.getEmpName().equals("user")){ dept.getEmp().remove(emp); } } tx.commit(); session.close();
|