JpaRepository不读取本机查询中的字符串参数

问题描述

我在Spring Boot应用程序中遇到JpaRepository问题 我想对我的数据库执行一个简单的更新查询,但事实证明,本机查询很烦人,请帮忙

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.sqlServer2008Dialect org.hibernate.dialect.sqlServer2012Dialect 分别,但没有一个起作用。

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

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

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

解决方法

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);
,

像这样构造查询:

@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,int Id);