SQLGrammarException и TransactionRequiredException в postgresql с данными весны jpa - PullRequest
0 голосов
/ 30 марта 2020

Я реализую удаление оператора из postgresql таблицы базы данных c в java. Но я постоянно получаю различные ошибки.

В целом мой запрос выглядит следующим образом.

@Modifying
@Query(value = "WITH deleted AS (DELETE FROM generated_statements WHERE created_date < :expiryDate RETURNING id) " +
        "SELECT count(*) FROM deleted;", nativeQuery = true)
int deleteByIdCreatedDateBefore(LocalDate expiryDate);

Но я получаю Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query

Если я удаляю @Modifying аннотация, я получаю: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet

Я считаю, что проблема в неправильных аннотациях. Должен ли я добавить @Transactional? Что мне делать с моей текущей аннотацией?

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Как говорится в сообщении об ошибке: вам нужна транзакция. Поэтому добавьте @Transactional.

Как указано в другом сообщении об ошибке: @Modifying не может вернуть ResultSet. Поэтому удалите @Modifying, хотя это противоречит интуиции.

Теперь я все еще не уверен, работает ли это, но если это не так, вы не сможете использовать @Query для этого в все и должны опираться на реализацию пользовательского метода, основанную на введенном JdbcTemplate или, возможно, EntityManager.

0 голосов
/ 30 марта 2020

Вам необходимо добавить аннотацию @Transactional, таким образом, Spring / jpa будет обрабатывать несколько вещей для вас: это открытие новой транзакции, выполнение запроса sql и фиксация этой транзакции.

Это необходимо для устранения потенциальных проблем с поврежденными данными при любом обновлении / удалении / изменении данных.

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