【发布时间】:2016-08-12 18:24:12
【问题描述】:
我试图从userDeptses 集中清除数据,但是当我调用clear() 方法并尝试保存时,我收到以下错误
Caused by: java.lang.UnsupportedOperationException: queued clear cannot be used with orphan delete
我的级联设置正确,我什至尝试只使用delete-orphan,但仍然有问题。所有相关类都实现了equals 和hashCode 方法:AppSystemUserUserDeptsDepartment
我在网上阅读的所有文档和文章都说使用clear() 和all-delete-orphan 的组合应该可以工作,但不适用于我。非常感谢任何帮助。
Grails 3.1.4
控制器:
AppSystemUser user = AppSystemUser.findBySystemUserid(cmd.netid);
user.userDeptses.clear();
userMgmtService.saveAppSystemUser(user);
应用系统用户:
class AppSystemUser {
String systemUserid
String email
String fullName
Date lastLogin
Boolean active
Set appSystemUserRoles = [];
Set userCollegeses = [];
Set userDeptses = [];
static hasMany = [appSystemUserRoles: AppSystemUserRole,
applicationExtensions: ApplicationExtension,
userCollegeses: UserColleges,
userDeptses: UserDepts]
static mapping = {
version false
fullName column: 'fullName'
lastLogin column: 'lastLogin'
id name: "systemUserid", generator: "assigned"
appSystemUserRoles cascade: "save-update, all-delete-orphan"
userCollegeses cascade: "save-update, all-delete-orphan"
userDeptses cascade: "save-update, all-delete-orphan"
}
....
用户部门:
class UserDepts {
Boolean active
AppSystemUser appSystemUser
Department department
static belongsTo = [AppSystemUser, Department]
static mapping = {
version false
appSystemUser column: "system_userid"
}
....
用户管理服务:
@Transactional
class UserMgmtService {
def saveAppSystemUser(AppSystemUser user) {
user.save();
}
}
【问题讨论】:
-
看起来您的
UserDepts实例仍然有对Department的引用。他们也需要清理才能被删除为孤儿 -
@injecteer 我不想删除
Department。UserDepts只是将 2 个表连接在一起,但删除连接数据后,AppSystemUser和Department数据应保持不变。 -
我就是这么说的。您的连接表的条目仍然有 1 个末端绑定到 Depatment。这就是保留连接条目的原因。为了删除它们,必须清洁两个关系端
标签: grails grails-orm cascading-deletes