Spring Data JPA和startsWith repository

时间:2016-08-19 06:59:12

标签: java postgresql spring-data-jpa

我有以下Spring Data JPA存储库:

@RepositoryRestResource(collectionResourceRel = "product", path = "product")
public interface ProductRepository extends PagingAndSortingRepository<Product, Integer> {

    @RestResource(path = "nameStartsWith", rel = "nameStartsWith")
    Page findByNameStartsWithOrderByNameDesc(@Param("name") String name, Pageable p);


}

Product类的定义很明显,是postgresql数据库上的映射JPA实体。

它工作得很好,但它有一个令我讨厌的问题,我无法解决。

我认为spring在使用_%作为通配符的like运算符的sql查询中转换此方法定义。无论如何,我担心这些字符在传递给这种方法时不会被转义,结果是如果我搜索名称包含_的产品,它会被理解为“任何字符”,这是由于我的产品使用的命名惯例,它很糟糕。

我需要一种在传递给方法之前转义name参数的方法,但我能想到的唯一方法是自己实现该方法,从而失去所有弹簧数据的魔力。有更优雅的方式吗?

谢谢!

PS我正在使用spring boot 1.4.0

1 个答案:

答案 0 :(得分:1)

您可以使用@Query注释围绕此方法环绕自定义sql查询。这是相关文档。

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query