我有以下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
答案 0 :(得分:1)
您可以使用@Query
注释围绕此方法环绕自定义sql查询。这是相关文档。
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.at-query