Я пытаюсь очистить данные из userDeptses
набора, но когда я вызываю метод clear()
и попытаться сохранить я получаю следующее сообщение об ошибкеGrails не может очистить набор hasMany с помощью каскадного
Caused by: java.lang.UnsupportedOperationException: queued clear cannot be used with orphan delete
У меня есть каскадный набор правильно, я даже пытался использовать только delete-orphan
, но все еще есть проблемы. Все соответствующие классы equals
и hashCode
методы, реализованные: AppSystemUser
UserDepts
Department
Вся документация и статьи, которые я прочитал в Интернете говорят, что с помощью комбинации clear()
и all-delete-orphan
должен работать, но не для меня. Любая помощь приветствуется.
Grails 3.1.4
Контроллер:
AppSystemUser user = AppSystemUser.findBySystemUserid(cmd.netid);
user.userDeptses.clear();
userMgmtService.saveAppSystemUser(user);
AppSystemUser:
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"
}
....
UserDept:
class UserDepts {
Boolean active
AppSystemUser appSystemUser
Department department
static belongsTo = [AppSystemUser, Department]
static mapping = {
version false
appSystemUser column: "system_userid"
}
....
UserMgmtService:
@Transactional
class UserMgmtService {
def saveAppSystemUser(AppSystemUser user) {
user.save();
}
}
выглядит так, как будто ваши экземпляры 'UserDepts 'все еще имеют ссылки на' Department'. они также должны быть очищены, чтобы удалить их как сирот – injecteer
@ injecteer Я не пытаюсь удалить «Департамент». 'UserDepts' просто соединяет две таблицы вместе, но данные' AppSystemUser' и 'Department' должны оставаться неповрежденными после удаления данных объединения. –
вот что я сказал. записи вашей таблицы объединений все еще имеют 1 конец, привязанный к Depatment. поэтому записи соединения сохраняются. для их удаления обе стороны должны быть очищены – injecteer