JPA,为什么不替换本机查询中的命名参数?

时间:2019-01-19 19:55:37

标签: spring parameters spring-data-jpa jpql

我尝试了两个索引和命名参数,但是都行不通:

   SELECT
        * 
    FROM
        Character 
    WHERE
        pinyin like '%:keyword%'

即将发布的sql是:

休眠:

{{1}}

为什么不使用我实际传递的参数替换关键字占位符?

3 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

public interface CharacterRepository extends JpaRepository<Character, Long> {
    @Query(nativeQuery=true, value="SELECT * FROM Character WHERE pinyin like ':keyword'")
    List<Character> findByKeyword(@Param("keyword") String keyword);
}

并调用如下方法:

repository.findByKeyword("%myKeyword%");

答案 1 :(得分:0)

尝试一下:

JPQL / HQL

select c from Character c where c.pinyin like %:keyword%
select c from Character c where c.pinyin like concat('%', :keyword, '%')

本机(PostrgeSQL / MySQL)

select * from character c where c.pinyin like concat('%', :keyword, '%')

本机(PostrgeSQL)

select * from character c where c.pinyin like '%' || :keyword || '%'

Spring Data JPA查询方法的替代变体

List<Character> findByPinyinContaining(String pinyin); 

其他信息:

答案 2 :(得分:0)

您的查询应该是这样-

@Query(nativeQuery=true, value="SELECT * FROM Character c WHERE c.pinyin like %:keyword%")
 List<Character> findByKeyword(@Param("keyword") String keyword);

希望有帮助。