我是 Spring 新手,快速学习了几天,需要修复工作场所中的旧服务。
我有一个 JPA 存储库,其中一些带有 @Query
的方法包含这个奇怪的 > ?1
。
看起来像这样:
@Repository
public interface LeadsRepository extends JpaRepository<LeadEntity, Long>
{
@Query(value = "select /*long query*/ where p.acceptedAt > ?1 and
p.acceptedAt < ?2", nativeQuery = true)
Stream<LeadEntity> findPendingPackages(date begin, date end);
}
这是什么意思?它怎么可能同时选择 >1 和 <2 ?那么它应该不选择任何内容...
P.S - 我也是一个 SQL 新手,所以对我要轻松一点:)
最佳答案
@Query(value = "select /*long query*/ where p.acceptedAt > ?1 and
p.acceptedAt < ?2", nativeQuery = true)
Stream<LeadEntity> findPendingPackages(date begin, date end);
这意味着 ?1
引用方法的第一个参数 => date begin
和?2
引用第二个参数 date end
等等...
所以findPendingPackages
应该返回其 acceptedAt
的所有包日期介于 date begin
之间和date end
因此您可以使用 ?
传递 SQl 参数,并且您必须尊重方法中的数量和顺序
参见here in doc欲了解更多信息
您还可以使用命名参数,例如 :paramname
如果您有很多参数要发送,以防止排序错误或数字,例如您的查询将是
@Query(value = "select /*long query*/ where p.acceptedAt > :begin and
p.acceptedAt < :end", nativeQuery = true)
Stream<LeadEntity> findPendingPackages(@Param("begin") date begin,@Param("end") date end);
关于java - "SELECT... WHERE column > ?1"- 那是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57594646/