有一个名为 zipcode
的表,其中列为 id, zip, city, state
。
在我们的例子中,我们希望根据 id
或 zip
或 city
或 state
获取记录>.
一般的SQL查询看起来像
SELECT * FROM zipcode WHERE id=id AND zip=zip AND city=city AND state=state;
如果我们想要获得一个特定的状态,我们将用给定的名称替换状态值。
SELECT * FROM zipcode WHERE id=id AND zip=zip AND city=city AND state='California';
如果我们想要一个特定的城市,那么我们可以这样写
SELECT * FROM zipcode WHERE id=id AND zip=zip AND city='Los Angles' AND state=state;
Spring Data JPA 的问题是,如果我们写一个方法
@Query(value = "SELECT * FROM zipcode WHERE id=?1 AND zip=?2 AND city=?3 AND state=?4", nativeQuery = true)
List<Zipcode> getZipCodes(Integer id, Integer zip, String city, String state)
我只想获取除特定州之外的所有城市,那么我不能使用这种方法,就像我如何使用上面的 SQL 查询一样,我们只需要替换列值。
我们如何在 Spring Data JPA 中使用 native 查询来实现这一点?
最佳答案
使用spring data jpa查询参数
@Query(value = "SELECT * FROM zipcode WHERE id=:id AND (zip=:zip or :zip is null) AND (city=:city or :city is null) AND (state=:state or :state is null) ", nativeQuery = true)
List<Zipcode> getZipCodes(@Param("id") Integer id, @Param("zip") Integer zip, @Praram("city) String city, @Param("state") String state)
关于java - 在Spring Data JPA中获取列的所有记录,即使我们将其指定为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53944169/