【问题标题】:Dynamic 'Like' in oracle (Spring)oracle(Spring)中的动态“喜欢”
【发布时间】:2021-07-06 12:51:35
【问题描述】:

您好,我正在尝试在“like”中使用参数,但是当我调用它会产生错误的方法时,我已经尝试了这些方法并且都产生错误

@Query(value = "SELECT * FROM BOOK l WHERE l.NAME LIKE LIKE '%'||:search||'%'", nativeQuery = true)
List<BookEntity> findByParam(@Param("search") String search);

错误:ORA-00936:缺少表达式

@Query(value = "SELECT * FROM BOOK l WHERE l.NAME LIKE %:search%", nativeQuery = true)
List<BookEntity> findByParam(@Param("search") String search);

错误:ORA-00911:无效字符

@Query(value = "SELECT * FROM BOOK l WHERE l.NAME LIKE CONCAT(CONCAT('%',:search),'%'), nativeQuery = true) 
List<BookEntity> findByParam(@Param("search") String search);

错误:ORA-00904:“CHARLIE”:标识符无效

感谢您的帮助

【问题讨论】:

  • 放弃查询并像findByNameLike 这样编写您的方法,Spring Data JPA 将为您完成一切。

标签: spring oracle spring-data-jpa


【解决方案1】:

尝试将整个通配符表达式直接绑定到:search 占位符

@Query(value = "SELECT * FROM BOOK l WHERE l.NAME LIKE :search", nativeQuery=true)
Collection<Book> findByName(@Param("search") String search);

在你的调用代码中,你会使用这个 sn-p:

String search = "%CHARLE%";
List<Book> books = yourJpaRepository.findByName(search);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多