title: Why does Hibernate not delete mappings for a many-to-many join on updates
body: <p>There are two persistent entities - User and Role. They are mapped by a <strong>many-to-many</strong> join. 
  The <code>User</code> entity - </p>
  
  <pre><code>@Entity
  @Table(name = "users")
  @Where( clause=" deletion_date IS NULL ")
  public class User extends AbstractEntity {
  
      private static final long serialVersionUID = 122622094779798680L;
  
      @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
      @JoinTable(name = "user_role", joinColumns = {
              @JoinColumn(name = "user_uid") },
              inverseJoinColumns = { @JoinColumn(name = "role_id"})
  
      private List&lt;Role&gt; roles;
      @Id
      @Column(name = "user_uid", unique = true, nullable = false)
      private String userUid;
  ...
  </code></pre>
  
  <p>It is an obvious ask to update the set of roles for a user in this schema. </p>
  
  <blockquote>
    <p>Example - Remove/Add some roles from a user</p>
  </blockquote>
  
  <p>Addition of roles is fine. But when a deletion of some roles is made to the user entity, the mappings in the join table created by hibernate is not purged.</p>
  
  <p>How to get this purged on role removal? </p>