首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用bulkUpdate批量删除

如何使用bulkUpdate批量删除
EN

Stack Overflow用户
提问于 2009-04-09 17:38:09
回答 4查看 11.2K关注 0票数 8

我有一个通用的用户/角色设置,带有一个user_role连接表。我试图使用Spring的HibernateTemplate来大规模删除所有锁定的用户,如下所示:

代码语言:javascript
复制
getHibernateTemplate().bulkUpdate("delete from User where locked=?", true);

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

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

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

代码语言:javascript
复制
@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>();

那么,即使用户有子记录,我如何对删除用户进行批处理?谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-21 21:57:43

根据JPA规范,大容量删除操作不级联到相关实体

4.10批量更新和删除操作 大容量更新和删除操作适用于单个实体类的实体(以及它的子类,如果有的话)。只能在FROM或UPDATE子句中指定一种实体抽象架构类型。 ..。 删除操作仅适用于指定类及其子类的实体。--它不级联到相关实体

但是,我希望JPA提供程序能够处理连接表。遗憾的是,Hibernate没有,这是登录在HHH-1917中。恐怕您必须重新使用原生SQL来自己清理联接表,或者在模式中使用级联外键。

票数 8
EN

Stack Overflow用户

发布于 2009-04-09 18:05:59

应用程序级级联(通过hibernate注释或JPA注释级联)只有在实际从db加载实际实体时才能工作。当您在HQL中使用hibernate模板时,您会注意到实体没有加载,HQL被直接转换为要执行的SQL。

如果要批量删除,则必须在删除父表数据之前使用HQL查询删除所有相关表(即角色)。

票数 2
EN

Stack Overflow用户

发布于 2009-04-09 17:46:15

我不完全确定,因为我很难重新创建这个问题,但我认为您可能需要在@ManyToMany中添加一个级联

代码语言:javascript
复制
@ManyToMany(cascade = CascadeType.ALL)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/735201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档