BORRAR EN CASCADA en JPA2 relación de muchos a muchos

He leído muchos temas relacionados con las asociaciones en cascada y de muchos a muchos, pero no he podido encontrar una respuesta a mi pregunta en particular.

Tengo una relación de muchos a muchos entre los perfiles de usuario y los roles. Cuando elimino un UserProfile quiero que la base de datos elimine los registros asociados en la tabla de unión (userprofile2role), así que con una acción real de SQL 'ON DELETE CASCADE'. es posible? Lo que sea que intente, Hibernate siempre crea la tabla UserProfile sin especificar el comportamiento ON DELETE.

Mapeo UserProfile:

@Entity
public class UserProfile {

    private Long id;
    private Set<Role> roles;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public final Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    // Note: CascadeType.ALL doesn't work for many-to-many relationships
    @ManyToMany (fetch = FetchType.EAGER)
    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }
}

Mapeo de roles:

@Entity
public class Role {

    private Long id;
    private Set<UserProfile> userProfiles = new HashSet<UserProfile>();

    @Id
    @GeneratedValue
    public final Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    // CascadeType.REMOVE doesn't create ON CASCADE DELETE in SQL?
    @ManyToMany(mappedBy = "roles", cascade = CascadeType.REMOVE)
    public Set<UserProfile> getUserProfiles() {
        return userProfiles;
    }

    public void setUserProfiles(Set<UserProfile> userProfiles) {
        this.userProfiles = userProfiles;
    }
}

El SQL para la tabla de unión resultante de estas asignaciones no contiene una parte ON CASCADE DELETE desafortunadamente. Intenté establecer el comportamiento CascadeType.REMOVE tanto en la colección de roles en UserProfile como en la colección de perfiles de usuario en Role (que se muestra aquí), pero fue en vano. Tus sugerencias son bienvenidas :-)

CREATE TABLE `px_userprofile2role` (
  `userprofile_id` BIGINT(20) NOT NULL,
  `role_id` BIGINT(20) NOT NULL,
  PRIMARY KEY (`userprofile_id`,`role_id`),
  KEY `FK1C82E84191F65C2B` (`userprofile_id`),
  KEY `FK1C82E8416203D3C9` (`role_id`),
  CONSTRAINT `FK1C82E8416203D3C9` FOREIGN KEY (`role_id`) REFERENCES `px_role` (`id`),
  CONSTRAINT `FK1C82E84191F65C2B` FOREIGN KEY (`userprofile_id`) REFERENCES     `px_userprofile` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=latin1

Respuestas a la pregunta(1)

Su respuesta a la pregunta