Собственный запрос INSERT выдает ОШИБКУ: метод разрешен только для запроса

В настоящее время я работаю над проектом SpringBoot + Hibernate. У меня есть требование вставить несколько значений в БД.

Я пытаюсь добиться этого с помощью Native Query. Ниже мой код:

@Repository
public interface StoreDataRepository extends JpaRepository<StoreDataRepository, Long> {

    @Query(value ="insert into store (id, name) values(:id, :name)", nativeQuery = true)
    public void storeData(@Param("id") int id, @Param("name") String name);

Из моей службы я просто вызываю этот метод с параметрами id и name.

Но я получаю следующую ошибку:

org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Method only for queries

Не могли бы вы помочь мне с этим?


person Scarlett Bejoic    schedule 14.03.2018    source источник
comment
Если вы используете Spring, добавьте @Modifying, как описано здесь: Spring Data JPA - Справочная документация - 4.3.8. Изменение запросов   -  person Andreas    schedule 14.03.2018
comment
Привет, Андреас. Да, я пытался использовать @Modifying, но затем получаю сообщение об ошибке, например: javax.persistence.TransactioRequiedException: выполнение запроса на обновление/удаление.   -  person Scarlett Bejoic    schedule 14.03.2018
comment
Так почему же вы не выполняете транзакцию при обновлении?   -  person Andreas    schedule 14.03.2018


Ответы (1)


Я смог исправить вышеуказанную проблему.

Мне пришлось указать @Transactional и @Modifying для моего метода репозитория.

Ниже решил проблему.

@Repository
public interface StoreDataRepository extends JpaRepository<StoreDataRepository, Long> {

    @Trsansactional
    @Modifying
    @Query(value ="insert into store (id, name) values(:id, :name)", nativeQuery = true)
    public void storeData(@Param("id") int id, @Param("name") String name);
person Scarlett Bejoic    schedule 14.03.2018