删除使用spring-security-core类的用户对象时的完整性约束违规

时间:2012-01-02 19:03:15

标签: grails spring-security

我在我的应用程序中使用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]

我知道为什么会出现整体约束违规行为

1 个答案:

答案 0 :(得分:9)

您获得完整性违规异常的原因是Spring安全性在SEC_USER和SEC_ROLE表之间创建了一个联结表SEC_USER_SEC_ROLE(用户可以有多个角色,反之亦然)。要删除用户对象,可以使用以下代码:

    Collection<SecUserSecRole> userRoles = SecUserSecRole.findAllBySecUser(user);
    userRoles*.delete();
    user.delete();