У нас есть следующие два объекта с many-many ассоциацией:
@Entity
public class Role {
...
@ManyToMany
@JoinTable( name = "user_has_role", joinColumns = { @JoinColumn( name = "role_fk" ) }, inverseJoinColumns = { @JoinColumn( name = "user_fk" ) } )
private Set userCollection;
...
}
и
@Entity
public class User {
...
//bi-directional many-to-many association to Role
@ManyToMany( mappedBy = "userCollection" )
private Set roleCollection;
...
}
Если мы хотим усечь все данные с
em.createQuery( "DELETE Role" ).executeUpdate();
мы должны очистить все ассоциации в "user_has_role" JoinTable как показанный в этом ответе:
for ( ... )
{
A a = aDao.getObject(aId);
B b = bDao.getObject(bId);
b.getAs().remove(a);
a.getBs().remove(b);
bDao.saveObject(b);
}
Существует ли способ сделать, удаляют все ассоциации в JoinTable сразу, не выполняя итерации по всем данным? Возможно, существует специальная HQL-команда как DELETE Role.user_has_role
?