Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Actually, I did a test with the following entities:</p> <pre><code>@Entity public class Person { @Id @GeneratedValue private Long id; private String firstName; private String lastName; @ManyToMany @Cascade(value = org.hibernate.annotations.CascadeType.DELETE_ORPHAN) private Set&lt;Role&gt; roles = new HashSet&lt;Role&gt;(); //... } @Entity public class Role { @Id @GeneratedValue private Long id; private String name; @ManyToMany(mappedBy = "roles") private Set&lt;Person&gt; persons = new HashSet&lt;Person&gt;(); //... } </code></pre> <p>And with the following dataset:</p> <pre><code>&lt;dataset&gt; &lt;PERSON id="1" firstname="john" lastname="doe"/&gt; &lt;PERSON id="2" firstname="clark" lastname="kent"/&gt; &lt;PERSON id="3" firstname="james" lastname="bond"/&gt; &lt;ROLE id="1" name="foo"/&gt; &lt;ROLE id="2" name="bar"/&gt; &lt;ROLE id="3" name="boo"/&gt; &lt;ROLE id="4" name="baz"/&gt; &lt;PERSON_ROLE persons_id="1" roles_id="1"/&gt; &lt;PERSON_ROLE persons_id="1" roles_id="2"/&gt; &lt;PERSON_ROLE persons_id="2" roles_id="2"/&gt; &lt;PERSON_ROLE persons_id="2" roles_id="3"/&gt; &lt;PERSON_ROLE persons_id="3" roles_id="1"/&gt; &lt;PERSON_ROLE persons_id="3" roles_id="4"/&gt; &lt;/dataset&gt; </code></pre> <p>The following test method:</p> <pre><code>@Test public void testCascadeDeleteOrphanOnDelete() { Person person = entityManager.find(Person.class, 1L); entityManager.remove(person); ReflectionAssert.assertPropertyLenientEquals("id", Arrays.asList(2, 3), findAllPersons()); ReflectionAssert.assertPropertyLenientEquals("id", Arrays.asList(3, 4), findAllRoles()); } private List&lt;Person&gt; findAllPersons() { return entityManager.createQuery("from Person").getResultList(); } private List&lt;Role&gt; findAllRoles() { return entityManager.createQuery("from Role").getResultList(); } </code></pre> <p>Just passes. Below the produced output:</p> <pre> Hibernate: select personx0_.id as id17_0_, personx0_.firstName as firstName17_0_, personx0_.lastName as lastName17_0_ from Person personx0_ where personx0_.id=? Hibernate: select roles0_.persons_id as persons1_1_, roles0_.roles_id as roles2_1_, rolex1_.id as id18_0_, rolex1_.name as name18_0_ from Person_Role roles0_ left outer join Role rolex1_ on roles0_.roles_id=rolex1_.id where roles0_.persons_id=? Hibernate: delete from Person_Role where persons_id=? Hibernate: delete from Role where id=? Hibernate: delete from Role where id=? Hibernate: delete from Person where id=? Hibernate: select personx0_.id as id17_, personx0_.firstName as firstName17_, personx0_.lastName as lastName17_ from Person personx0_ Hibernate: select rolex0_.id as id18_, rolex0_.name as name18_ from Role rolex0_ </pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload