Java 如何一次删除Hibernate JoinTable中的所有关联?

Java 如何一次删除Hibernate JoinTable中的所有关联?,java,hibernate,many-to-many,jointable,Java,Hibernate,Many To Many,Jointable,我们有以下两个具有多对多关联的实体: @Entity public class Role { ... @ManyToMany @JoinTable( name = "user_has_role", joinColumns = { @JoinColumn( name = "role_fk" ) }, inverseJoinColumns = { @JoinColumn( name = "user_fk" ) } ) private Set<User>

我们有以下两个具有多对多关联的实体:

@Entity
public class Role {
  ...
  @ManyToMany
  @JoinTable( name = "user_has_role", joinColumns = { @JoinColumn( name = "role_fk" ) }, inverseJoinColumns = { @JoinColumn( name = "user_fk" ) } )
  private Set<User>           userCollection; 
  ...
}
我们必须清除“用户角色”联接表中的所有关联,如所示:

有没有一种方法可以一次删除JoinTable中的所有关联,而无需迭代所有数据?
可能有一个特殊的HQL命令,比如
DELETE Role.user\u拥有\u Role

虽然JPA规范明确规定批量操作不会级联到相关实体(第4.10节批量更新和删除操作),但我希望提供程序至少处理连接表。遗憾的是,Hibernate没有这样做,这是登录的。解决方法:使用本机SQL

@Entity
public class User {
  ...
  //bi-directional many-to-many association to Role
  @ManyToMany( mappedBy = "userCollection" )
  private Set<Role>        roleCollection;
  ...
}
em.createQuery( "DELETE Role" ).executeUpdate();
for ( ... )
{
    A a = aDao.getObject(aId);
    B b = bDao.getObject(bId);

    b.getAs().remove(a);
    a.getBs().remove(b);
    bDao.saveObject(b); 
}