java - Spring Jpa 更新 : Can not issue data manipulation statements with executeQuery()

标签 java mysql spring spring-jdbc

我尝试使用句柄查询来更新 SQL 数据库中的表。

代码:

    @Autowired
    private ProducerRepository producerRepository;

    public void update(Producer producer){

        String name = producer.getProducerName();
        long id = producer.getId();

//        producerRepository.save(producer); //this method works well.
        producerRepository.update(name, id); //handle attempt - throws exeption in this string
    }

生产者库:

@Repository
    public interface ProducerRepository extends JpaRepository<Producer, Long>{

        @Query(nativeQuery = true, value = "UPDATE producer SET producer_name = :pName WHERE id = :id")
        Producer update(
                @Param("pName") String pName,
                @Param("id") long id
        );
    }

producer 实体的所有参数都是正确的,producerRepository.save(producer) 运行良好。 (我也在控制台 nameid 字段中输出 - 好吧)

所以,我可以将 producer 保存在数据库中,但是,当我尝试使用 update() 方法时,我得到了错误。

Can not issue data manipulation statements with executeQuery()


附言

控制台中的sql查询也运行良好

(UPDATE producer SET producer_name = 'some name' WHERE id = ....)

应该注意的是,存储库中的其他 SQL native 查询可以正常工作。所以spring/hibernate/jdbc的设置都是正确的。

最佳答案

使用注解@Modifying

This will trigger the query annotated to the method as updating query instead of a selecting one.

来自2.2.6 修改查询 https://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/reference/html/jpa.repositories.html

关于java - Spring Jpa 更新 : Can not issue data manipulation statements with executeQuery(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51249381/

相关文章:

MySQL : between value in string

java - 如何使用spring aop记录方法链

mysql - 将 mysql DATETIME 列转换为纪元秒

mysql - 联合表中每个 ID 的最新日期

spring - 无法加载 application.properties 文件 @DataJpaTest 注释

java - 为新的 Spring MVC 项目选择 Thymeleaf 和 A​​ngular

java - Docker - 在 Java 应用程序中获取绑定(bind)端口

java - 无法加载 netezza JDBC 驱动程序

java - ActionListener 在内存游戏客户端 - 服务器应用程序中使用

java - 运行时发生log4j.PropertyConfigurator错误说找不到适合configure(FileInputStream)的方法