【问题标题】:JpaRepository does not read string parameter in a native queryJpaRepository 不读取本机查询中的字符串参数
【发布时间】:2021-01-19 17:22:47
【问题描述】:

我的 JpaRepository 在 Spring Boot 应用程序中遇到问题 我想对我的数据库执行一个简单的更新查询,结果发现原生查询很烦人,请帮忙

public interface ImageRepository extends JpaRepository<Image, Integer> {
    @Modifying 
    @Transactional
    @Query(value = "UPDATE image SET path =(0?), status = (1?) WHERE Id = (2?)", nativeQuery = true)
    void update(String path ,String status,int Id);

}

上面的代码返回以下错误信息

com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'.

我尝试将 SQL 方言更改为 org.hibernate.dialect.SQLServer2008方言 org.hibernate.dialect.SQLServer2012方言 分别,没有一个工作。

我还尝试以不同的方式编写查询,这不会给我一个错误,但它不会更新字段。它可以从方法中检测整数值,但会将字符串值设置为 emply 值:

    @Query(value = "UPDATE image SET physical_path =(0), status = (1) WHERE Id = (2)", nativeQuery = true)

如果有人遇到同样的问题,请支持

【问题讨论】:

    标签: java sql spring-data-jpa


    【解决方案1】:

    Spring Data JPA - Reference 你可以看到参数(以你想使用它们的方式)被定义为 -> ?1, ?2 etc..

    另外,请记住,JPQL 语法与普通 sql 略有不同。

    @Modifying
    @Query("update Image i set i.path = ?1 where i.status = ?2 where i.id = ?3")
    void update(String path, String status, int id);
    

    【讨论】:

    • 感谢您提供的信息,但我已经尝试过此查询,但它没有完成这项工作。但是,@Som 说明了解决方案。再次感谢您的回答
    • 嘿@Fadi 随时告诉我这个答案有什么问题
    • 我在“@P0”错误附近收到不正确的语法。这表明参数不能从查询中访问。奇怪的是两个月前我有相同的代码并且它按预期工作。但是在新安装 SQL Server 2019 之后,由于某些原因,我开始在 JPA 存储库中遇到一些问题。
    【解决方案2】:

    像这样构建查询:

    @Query(value = "UPDATE image i SET path =:path, status = :status WHERE i.Id = :Id", nativeQuery = true)
    void update(@Param("path") String path , @Param("status") String status, @Param("Id") int Id);
    

    对于位置参数:

    @Query(value = "UPDATE image i SET path = ?1, status = ?2 WHERE i.Id = ?3", nativeQuery = true)
    void update(String path , String status, int Id);
    

    【讨论】:

    • 谢谢,第一种方法对我有用。我已经尝试了您建议的第二个,但它对我不起作用。无论如何,谢谢,现在我可以用其余的代码移动一个。这种方法我真的很烦两个多小时
    • 没问题。很高兴知道您可以继续您的工作。
    猜你喜欢
    • 2019-11-11
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多