Bulk delete doesn't cascade delete on join table
Description
Attachments
causes
follows up on
Activity

Aurelien DROUARD September 26, 2013 at 1:22 PM
Hello,
In 4.2.6.Final release the delete from CAT_PERSON is now ok. Thanks Brett.
But I've got anohter problem with "map" mapping.
Could you handle this case ?
Cat.hbm.xml :
...
<map name="map" table="MAP">
<key column="CAT_KEY" />
<map-key type="java.lang.Integer">
<column name="MAP_KEY" />
</map-key>
<element column="MAP_VALUE" type="java.lang.Integer" />
</map>
...
Cat.java :
public class Cat
{
...
private Map<Integer, Integer> map;
...
Java test :
Person bob = new Person();
bob.setId(1l);
bob.setFirstname("bob");
getCurrentSession().save(bob);
Cat felix = new Cat();
felix.setId(1l);
felix.setName("felix");
Set<Person> owners = new HashSet<Person>();
owners.add(bob);
felix.setOwners(owners);
felix.setMap(new HashMap<Integer, Integer>());
felix.getMap().put(1, 10);
felix.getMap().put(2, 10);
felix.getMap().put(3, 15);
felix.getMap().put(4, 20);
getCurrentSession().save(felix);
Query query = getCurrentSession().createQuery("delete com.company.product.domain.Cat c where c.id=aram_id)");
query.setParameter("param_id", 1l);
query.executeUpdate();
Generated SQL:
insert into PERSON (FIRSTNAME, ID) values (?, ?)
insert into CAT (NAME, ID) values (?, ?)
insert into CAT_PERSON (ID_CAT, ID_PERSON) values (?, ?)
insert into MAP (CAT_KEY, MAP_KEY, MAP_VALUE) values (?, ?, ?)
insert into MAP (CAT_KEY, MAP_KEY, MAP_VALUE) values (?, ?, ?)
insert into MAP (CAT_KEY, MAP_KEY, MAP_VALUE) values (?, ?, ?)
insert into MAP (CAT_KEY, MAP_KEY, MAP_VALUE) values (?, ?, ?)
delete from CAT_PERSON where (ID_CAT) in (select ID from CAT where ID=?)
delete from CAT where ID=?
-> ConstraintViolationException: could not execute statement
violation of FOREIGN KEY constraint "FK_DX9BH52S5F00VYW30I1M8F0FM" on table "MAP"

Brett Meyer September 24, 2013 at 1:53 PM
, yes, definitely. Just wanted a few eyes on the commit first.

Aurelien DROUARD September 24, 2013 at 7:16 AM
Brett, will you push the fix before 4.2.6 release ?

Brett Meyer September 17, 2013 at 7:05 PM
Made it a PR – appreciate reviews before I push:

Aurelien DROUARD September 13, 2013 at 8:16 AM
Yes Brett, that's exactly the problem.
Details
Assignee
Brett MeyerBrett MeyerReporter
Aurelien DROUARDAurelien DROUARDComponents
Fix versions
Priority
Major
Details
Details
Assignee

Reporter

HQL delete doesn't cascade delete on join table.
Person bob = new Person();
bob.setId(1l);
bob.setFirstname("bob");
getCurrentSession().save(bob);
Cat felix = new Cat();
felix.setId(1l);
felix.setName("felix");
Set<Person> owners = new HashSet<Person>();
owners.add(bob);
felix.setOwners(owners);
getCurrentSession().save(felix);
Query query = getCurrentSession().createQuery("delete com.company.product.domain.Cat c where c.id=aram_id)");
query.setParameter("param_id", 1l);
return query.executeUpdate();
insert into PERSON (FIRSTNAME, ID) values (?, ?)
insert into CAT (NAME, ID) values (?, ?)
insert into CAT_PERSON (ID_CAT, ID_PERSON) values (?, ?)
delete from CAT where ID=?
-> ConstraintViolationException: could not execute statement
violation of FOREIGN KEY constraint "FK_3QS4XQHEUL1KIQILV53S1F0GB" on table "CAT_PERSON"
Note that if Cat extends Animal with joined-subclass mapping everything is OK.