"Не удалось выполнить DbAction.DeleteRoot" с JDBC? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть JDBC-репозиторий с методом «deleteItem», однако, когда я запускаю метод через Postman, я получаю странную ошибку: «Не удалось выполнить DbAction.DeleteRoot»

Некоторые элементы удаляются без проблем,только подмножество данных вызывает эту ошибку.

Вот размер моего кода @Repository:

@Repository
interface ItemRepository: CrudRepository<Item, UUID>
{
    @Query( "select * from item_data where scopes @> :scopes")
    fun findItemsByScope(@Param("scopes") scope: String): List<Item>
}

А вот @Component, который реализует его (и вызывается моим API)

@Component
class RepositoryItemPersistenceAdapter(
        private val repository: ItemRepository
){

    fun getItemsByScope(scope: String) : List<Item> =
       repository.findItemsByScope(scope)

    fun deleteItem(id: UUID) = repository.deleteById(id)

    fun getAllItems(): List<Item> = repository.findAll()

}

1 Ответ

0 голосов
/ 18 февраля 2019

Эта проблема в конечном итоге оказалась не на основе кода, а на основе схемы!

Идентификатор базы данных Item использовался в качестве внешнего ключа в двух других базах данных.Попытка удалить элемент по идентификатору вызвала ошибку, потому что он потерял бы строки в других таблицах, когда внешний ключ перестал ссылаться на что-либо.

Сведения об исключении (которые не возвращаются как часть 500) были следующими:

org.postgresql.util.PSQLException: ОШИБКА: обновление или удаление в таблице "item_data" нарушает ограничение внешнего ключа "identity_mapping_id_fkey" в таблице "identity_mapping" Detail: Key (id)= (99304a5d-5bcc-4f31-a192-625ed8c9059b) по-прежнему упоминается из таблицы "identity_mapping".

По этой же причине некоторые данные удалялись просто отлично - в них не было соответствующих записей втаблица сопоставления, поэтому она не вызвала эту ошибку во время удаления.

Окончательное решение заключается в проверке внешних ключей перед удалением, либо удалении, либо обновлении соответствующих строк перед выполнением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...