Java %如spring JpaRepository中的%Query

Java %如spring JpaRepository中的%Query,java,jpa,spring-data-jpa,Java,Jpa,Spring Data Jpa,我想在JpaRepository中编写一个类似的查询,但它没有返回任何内容: 类似于“%place%”-它不起作用 像“地点”一样完美地工作 这是我的密码: @Repository("registerUserRepository") public interface RegisterUserRepository extendsJpaRepository<Registration,Long> { @Query("Select c from Registration c whe

我想在
JpaRepository
中编写一个类似的查询,但它没有返回任何内容:

类似于“%place%”
-它不起作用

像“地点”
一样完美地工作

这是我的密码:

@Repository("registerUserRepository")
public interface RegisterUserRepository extendsJpaRepository<Registration,Long> {

    @Query("Select c from Registration c where c.place like :place")
     List<Registration> findByPlaceContaining(@Param("place")String place);
}
@Repository(“registerUserRepository”)
公共接口注册表SerRepository extendsJpaRepository{
@查询(“从注册c中选择c,其中c.place类似:place”)
列出findByPlaceContaining(@Param(“place”)字符串位置);
}

在查询中,spring数据JPA查询需要“%”字符以及
后面的空格字符,如

@Query(“从注册c中选择c,其中c.place like%:place%”)

比照

您可能希望一起去掉
@Query
注释,因为它似乎类似于标准查询(由spring数据代理自动实现);i、 e.使用单行线

List<Registration> findByPlaceContaining(String place);
列出findByPlaceContaining(字符串位置);

这就足够了

实际上根本不需要
@Query
注释

您可以使用以下命令

    @Repository("registerUserRepository")
    public interface RegisterUserRepository extends JpaRepository<Registration,Long>{
    
    List<Registration> findByPlaceIgnoreCaseContaining(String place);

    }
@Repository(“registerUserRepository”)
公共接口RegisterUserRepository扩展了JpaRepository{
列出findByPlaceIgnoreCaseContaining(字符串位置);
}

您还可以使用Spring Data JPA supported关键字实现类似的查询

列出findByPlaceContaining(字符串位置);

您可以选择使用占位符作为:

@Query("Select c from Registration c where c.place LIKE  %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);
@Query(“从注册c中选择c,其中c.place像%?1%”)
列出findPlaceContainingKeywordAnywhere(字符串位置);
调用函数时,我使用:
findbyplace包含(“%”+位置)

或:
findByPlaceContaining(place+“%”)

或:
findByPlaceContaining(“%”+place+“%”)

答案将准确无误

-->` @Query("select u from Category u where u.categoryName like %:input%") List findAllByInput(@Param("input") String input); -->`@Query(“从类别u中选择u,其中u.categoryName类似%:input%”) 列出findAllByInput(@Param(“输入”)字符串输入);
对于您的情况,您可以直接使用JPA方法。该代码如下所示:

包含:选择。。。like%:place%

List<Registration> findByPlaceContainingIgnoreCase(String place);
列出findByPlaceContainingIgnoreCase(字符串位置);
在这里,IgnoreCase将帮助您在忽略案例的情况下搜索项目

在JPQL中使用@Query

@Query("Select registration from Registration registration where 
registration.place LIKE  %?1%")
List<Registration> findByPlaceContainingIgnoreCase(String place);
@Query(“从注册位置选择注册
注册地点(如%?1%))
列出findByPlaceContainingIgnoreCase(字符串位置);
以下是一些相关的方法:

  • Like
    findByPlaceLike

    …x.place在哪里?1

  • StartingWith
    findByPlaceStartingWith

    …其中x.place类似于?1(参数绑定了附加的%)

  • EndingWith
    findByPlaceEndingWith

    …其中x.place类似于?1(参数与前缀%绑定)

  • 包含
    findByPlaceContaining

    …其中x.place类似于?1(参数绑定包装为%)

  • 更多信息、视图和

    希望这对你有帮助:)

    试试这个

    @Query("Select c from Registration c where c.place like '%'||:place||'%'")
    

    在没有
    @Query
    的情况下找到了解决方案(实际上我尝试了哪一个是“接受的”。但是,它不起作用)

    必须返回
    页面
    ,而不是
    列表

    public接口EmployeeRepository
    扩展分页和排序存储库{
    Page findAllByNameIgnoreCaseStartsWith(字符串名称,可分页);
    }
    
    IgnoreCase
    零件对于实现这一点至关重要

    我用这个:

    @Query("Select c from Registration c where lower(c.place) like lower(concat('%', concat(:place, '%')))")
    

    lower()类似于字符串中的toLowerCase,因此结果不区分大小写。

    您只需在参数后面说'like'关键字即可

    List<Employee> findAllByNameLike(String name);
    
    列出findAllByNameLike(字符串名称);
    
    使用findbyplaceignorecasescontaining(字符串位置)忽略查询的大小写可能也很有用;作为旁注-您不能在同一查询中混合并匹配%:param%和%param%。否则,应用程序将无法启动。谢谢。我以前用
    '
    编写
    如“%:place%”
    ,但根本没有结果,因为Hibernate会将
    '
    s单独添加到字符串中。@Query(“从注册c中选择c,其中c.place如%:place%”)。在Spring Boot版本2.3.3中不起作用。你能告诉我为什么我可以在使用2.3时让它工作吗。3@SubhaBhowmik哪个版本完全不起作用?你说对于2.3.3,它起作用了,也不起作用了。在Spring Boot 2.4.0中,我也在努力使用%:param%,但我发现在SQL函数中不能有%:param%。在LOWER(“%:param%”)中,:param不会因为引号而被替换。希望这能帮助你。对我来说,这是最好的解决办法。我不知道您可以将IgnoreCase与Containing结合使用,文档中没有。如果我想使用多个列,该如何处理我相信
    @Query()
    是必须的,对吗?使用这种方法,我必须使
    实际上不是适合这种情况的解决方案:
    findbyfield1或field2包含(stringphraseforfield1,stringphraseforfield2)
    如果我们在查询中使用
    something=:place
    另一个类似%:place%
    的方法,那么这将非常有用。我使用相同的方法,但是当lower函数中的变量为null时,我会得到以下错误,如何添加null检查?功能降低(bytea)不存在
    @Query("Select c from Registration c where lower(c.place) like lower(concat('%', concat(:place, '%')))")
    
    List<Employee> findAllByNameLike(String name);