Не удалось извлечь ResultSet при выполнении настроенного собственного запроса - PullRequest
0 голосов
/ 11 декабря 2018

Я использую Spring Data JPA и хочу инкапсулировать метод, который выполняет определенный SQL.Я делаю это в следующем случае:

@Component
public interface UserRepository extends CrudRepository<User, String> {
  @Query(
      value = "delete from User u where u.alias = :alias",
      nativeQuery = true
      )
  void deleteUserByAlias(@Param("alias") String alias);
}

Однако в результате я получил следующее сообщение:

{
  "timestamp": "2018-12-11T15:54:54.627+0000",
  "status": 500,
  "error": "Internal Server Error",
  "message": "could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet",
  "path": "/user/delete"
}

Так в чем же проблема?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

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

Выводзапросов на удаление с использованием данного имени метода поддерживается начиная с версии 1.6.0.RC1 Spring Data JPA.Ключевые слова удалить и удалить поддерживаются.В качестве возвращаемого значения можно выбрать номер или список удаленных объектов.

Long removeByLastname (String lastname);

Список deleteByLastname (String lastname);

Я могу написать

  @Transactional
  void deleteByAlias(String alias);

на UserRepository для достижения цели.

Я не приму этот ответ и не буду открываться для дальнейшего вклада.

0 голосов
/ 13 декабря 2018

Если ваш метод уже Транзакционный, пожалуйста, используйте транзакционный метод репозитория также

@Component
    public interface UserRepository extends CrudRepository<User, String> {

      @Query(
          value = "delete from User u where u.alias = :alias",
          nativeQuery = true
          )
      @Modifying
      @Transactional
      void deleteUserByAlias(@Param("alias") String alias);
    }
0 голосов
/ 11 декабря 2018

ваш класс должен выглядеть следующим образом:

@Component
public interface UserRepository extends CrudRepository<User, String> {

  @Query(
      value = "delete from User u where u.alias = :alias",
      nativeQuery = true
      )
  @Modifying
  void deleteUserByAlias(@Param("alias") String alias);
}

Как вы можете видеть, я использую @Modifying, для получения дополнительной информации посмотрите на https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queries

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