【问题标题】:Native Query INSERT is giving ERROR : Method is only allowed for a Query本机查询插入给出错误:方法只允许用于查询
【发布时间】:2018-08-22 10:15:01
【问题描述】:

我目前正在开发一个 SpringBoot + Hibernate 项目。 我需要向数据库中插入少量值。

我正在尝试使用本机查询来实现这一目标。以下是我的代码:

@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

你能帮我解决这个问题吗?

【问题讨论】:

  • 如果使用 Spring,请添加 @Modifying,如下所述:Spring Data JPA - Reference Documentation - 4.3.8. Modifying queries
  • 嗨 Andreas - 是的,我尝试使用 @Modifying 但随后出现错误,例如:javax.persistence.TransactioRequiedException: Executing an update/delete query
  • 那么为什么你在做更新的时候不参与事务呢?

标签: java hibernate spring-data-jpa nativequery


【解决方案1】:

我能够解决上述问题。

我必须为我的 Repository 方法指定 @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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2015-12-19
    • 2016-09-08
    • 2020-03-10
    相关资源
    最近更新 更多