如何使用bulkUpdate批量删除

Sam*_*amS 7 java orm spring hibernate

我有一个常见的用户/角色设置,带有user_role连接表.我正在尝试使用Spring的HibernateTemplate批量删除所有锁定的用户,如下所示:

getHibernateTemplate().bulkUpdate("delete from User where locked=?", true);
Run Code Online (Sandbox Code Playgroud)

如果被删除的用户没有任何角色(user_role表中没有记录),那么一切都很顺利; 但是如果用户确实有角色记录,我会收到以下错误:

违反完整性约束 - 找到子记录

角色在User.java中定义如下:

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_role", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<Role>();
Run Code Online (Sandbox Code Playgroud)

那么,即使用户有子记录,我如何批量删除用户呢?谢谢!

Pas*_*ent 8

根据JPA规范,批量删除操作不会级联到相关实体:

4.10批量更新和删除操作

批量更新和删除操作适用于单个实体类的实体(连同其子类,如果有的话).在FROM或UPDATE子句中只能指定一个实体抽象模式类型.

...

删除操作仅适用于指定类及其子类的实体.它不会级联到相关实体.

但是,我希望JPA提供程序能够处理连接表.可悲的是,Hibernate没有,这是在HHH-1917中记录的.我担心你不得不依靠原生SQL来自己清理连接表或者在模式中使用级联外键.