我在我的应用程序中使用spring-security-core插件。 我的用户类扩展了SecUser,没有其他任何事情可以做到与众不同 当尝试删除用户时,我收到以下错误
|错误2012-01-02 19:54:57,277 [“http-bio-8080”-exec-10]错误util.JDBCExceptionReporter - 参照完整性约束违规:“FK6630E2AB3FFA32A:PUBLIC.SEC_USER_SEC_ROLE FOREIGN KEY(SEC_USER_ID)参考PUBLIC.SEC_USER( ID)”; SQL语句: 从sec_user中删除id =?和版本=? [23003-147]
|错误2012-01-02 19:54:57,294 [“http-bio-8080”-exec-10] ERROR events.PatchedDefaultFlushEventListener - 无法将数据库状态与会话同步由JdbcSQLException引起:参照完整性约束违规:“FK6630E2AB3FFA32A:PUBLIC.SEC_USER_SEC_ROLE FOREIGN KEY(SEC_USER_ID)REFERENCES PUBLIC.SEC_USER(ID)”; SQL语句: 从sec_user中删除id =?和版本=? [23003-147]
我知道为什么会出现整体约束违规行为
答案 0 :(得分:9)
您获得完整性违规异常的原因是Spring安全性在SEC_USER和SEC_ROLE表之间创建了一个联结表SEC_USER_SEC_ROLE(用户可以有多个角色,反之亦然)。要删除用户对象,可以使用以下代码:
Collection<SecUserSecRole> userRoles = SecUserSecRole.findAllBySecUser(user);
userRoles*.delete();
user.delete();