【问题标题】:@Query with 2 parameters in Java Spring@Query 在 Java Spring 中有 2 个参数
【发布时间】:2022-11-22 01:50:58
【问题描述】:

我正在寻找以下问题的解决方案 - 我想像这样创建一个@Query:

@Query("select s from Student s where s.name like %?1% and s.surname like %?1%")

因为我需要能够向学生展示名字和姓氏。我能够使它起作用,因为当我使用 or 更改 and 时,查询显示具有给定名称或给定姓氏的条目,但是一旦我将其更改回并且没有任何显示。

interface StudentRepository extends JpaRepository<Student, Integer> {

@Query("select s from Student s where s.name like %?1% and s.surname like %?1%")
Page<Student> findByNameAndSurname( String name, String surname,  Pageable pageable);
}

@GetMapping
Page<Student> getAllStudents(@RequestParam Optional<String> name,
                             @RequestParam Optional<String> surname,
                             @RequestParam Optional<Integer> page,
                             @RequestParam Optional<String> sortBy) {
    return repository.findByNameAndSurname(name.orElse("_"),
                                            surname.orElse("_"),
                                            PageRequest.of(
                                                            page.orElse(0), 5,
                                                            Sort.Direction.ASC, sortBy.orElse("id")));


我还有第二个问题,是否可以在使用 pageRequest 时删除显示在 JSON 末尾的代码 - 如果可能的话,我希望只显示学生条目而不显示此代码


{"content":[],"pageable":{"sort":{"empty":false,"sorted":true,"unsorted":false},"offset":0,"pageNumber":0,"pageSize":5,"unpaged":false,"paged":true},"last":true,"totalPages":0,"totalElements":0,"size":5,"number":0,"sort":{"empty":false,"sorted":true,"unsorted":false},"first":true,"numberOfElements":0,"empty":true}

我尝试在 @Query 注释中使用本机查询,我也尝试修改查询本身,使用我在网上找到的一些 concat 技巧,但没有任何效果;(

【问题讨论】:

    标签: java sql spring get-mapping


    【解决方案1】:

    看看你的查询:

    @Query("select s from Student s where s.name like %?1% and s.surname like %?1%")
    

    您已经使用 ?1 定义了两个占位符,这将导致两个占位符具有相同的值。所以你实际上是在搜索名字和姓氏相同的人,这就是为什么 OR 可以在这里工作。

    我不熟悉 Spring,但阅读以下 tutorial 告诉我您可以按如下方式编写查询:

    @Query("select s from Student s where s.name like %:firstname% and s.surname like %:lastname%")
    

    不过,您需要在方法的参数列表中使用 @Param(var) 注释绑定参数。

    对于最后一个问题:您可能不应该从 REST (?) 服务返回 Page&lt;Student&gt;,而应该返回 List&lt;Student&gt;

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 1970-01-01
      • 2013-06-19
      • 1970-01-01
      • 2021-01-12
      • 2015-08-30
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      相关资源
      最近更新 更多