нарушение ограничения целостности при удалении объекта пользователя, который использует классы Spring-Security-Core - PullRequest
5 голосов
/ 02 января 2012

Я использую плагин spring-security-core в своем приложении. Мой пользовательский класс расширяет SecUser, и ничего больше не делается, что может быть необычным При попытке удалить пользователя я получаю следующую ошибку

| Ошибка 2012-01-02 19: 54: 57,277 ["http-bio-8080" -exec-10] ОШИБКА util.JDBCExceptionReporter - Нарушение ограничения ссылочной целостности: "FK6630E2AB3FFA32A: КЛЮЧ FOREIGN PUBLIC.SEC_USER_SEC_ROLE (SEC_USER_SEC_CER_SER_CER_SER_SER_SER_SER_CER_SER_SER_SER_SER_SER_SER_CER_SER_SER_SER_SER_SER_SER_CER_SER_SER_SER_SER_CER_SER_SER_SER_SER_SER_SER_CER_SER_SER_SER_SER_SER_SER_S_RUS_CER_SER_SER_SER_SER_C_RUS) Я БЫ)"; Оператор SQL: удалить из sec_user где id =? а версия =? [23003-147]
| Ошибка 2012-01-02 19: 54: 57,294 ["http-bio-8080" -exec-10] ОШИБКА 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 Ответ

9 голосов
/ 02 января 2012

Причина, по которой вы получаете исключение нарушения целостности, заключается в том, что Spring Security создает таблицу соединений SEC_USER_SEC_ROLE между таблицами SEC_USER и SEC_ROLE (пользователь может иметь несколько ролей и наоборот). Для удаления объекта пользователя вы можете использовать следующий код:

    Collection<SecUserSecRole> userRoles = SecUserSecRole.findAllBySecUser(user);
    userRoles*.delete();
    user.delete();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...