나는 userDeptses
세트에서 데이터를 삭제하려고 사용하여 hasMany의 세트를 지울 수 없습니다하지만 난 clear()
메서드를 호출하려고 할 때이Grails는 캐스케이드
Caused by: java.lang.UnsupportedOperationException: queued clear cannot be used with orphan delete
내가 가진 다음과 같은 오류가 저장 계단식 세트 제대로, 심지어 그냥 delete-orphan
를 사용하여 노력했지만 여전히 문제가 있습니다. AppSystemUser
UserDepts
Department
모든 문서 및 기사 나는 온라인 읽고는 clear()
및 all-delete-orphan
의 조합을 사용하는 것은,하지만 나를 위해 작동하도록되어 있다고 : 모든 관련 클래스가 구현 equals
및 hashCode
방법이있다. 어떤 도움이라도 대단히 감사합니다.
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 'Department'를 삭제하려고하지 않습니다. 'UserDepts'는 2 개의 테이블을 함께 조인하지만 Join 데이터를 삭제 한 후에는'AppSystemUser' 및'Department' 데이터는 그대로 유지해야합니다. –
그것이 내가 말한 것입니다. 조인 테이블의 항목에는 여전히 Depatment에 바인딩 된 1 개의 끝이 있습니다. 그 이유는 조인 항목이 유지되는 이유입니다. 그들을 제거하기 위해서는 양쪽 관계면을 청소해야합니다 – injecteer