java—如何在本机查询jpa中传递参数

busg9geu  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(309)

我有一个服务类,它通过调用jpa存储库接收汽车列表 carRepository.retrieveCars() . 存储库方法正在使用本机查询检索记录。

public interface CarRepository extends JpaRepository<Car, String> {
    @Query(nativeQuery = true,
           value = "select *" +
                   "from car_records")
 }
 List<Car> retrieveCars();

现在我想传递参数 carRepository.retrieveCars(Long vinNo, Long serialNo) 并在查询中使用它们。我想我需要一些准备好的陈述。不过,我不知道如何实现这一点。

public interface CarRepository extends JpaRepository<TRace, String> {
    @Query(nativeQuery = true,
           value = "select *" +
                   "from car_records" +
                    "where carVinNo = ?! and carSerialNo >= ?1")
 }

 query.setParameter(1, vinNo, 2,serialNo);   //this is certainly not correct implementation
 List<Car> retrieveCars(vinNo, serialNo);
nx7onnlm

nx7onnlm1#

当您使用spring数据jpa时,有两种方法可以解决这个问题
1) 命名参数

public interface CarRepository extends JpaRepository<TRace, String> {
        @Query(nativeQuery = true,
               value = "select *" +
                       "from car_records" +
                        "where carVinNo = :vinNo and carSerialNo >= :serialNo")
     }
     List<Car> retrieveCars(@Param("vinNo") Long vinNo,@Param("serialNo") Long serialNo); 
    }

指定参数的spring doc
2) 索引参数

public interface CarRepository extends JpaRepository<TRace, String> {
    @Query(nativeQuery = true,
           value = "select *" +
                   "from car_records" +
                    "where carVinNo = ?1 and carSerialNo >= ?2")
 }
 List<Car> retrieveCars(Long vinNo, Long serialNo); 
}

spring文档的索引参数示例
然后从你的服务类你叫它

carRepository.retrieveCars(vinNo, serialNo);

两种情况对你都一样。

相关问题