Spring Data JPA 和 startsWith 存储库

4

我有以下的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);


}

产品类的定义很明显,是postgresql数据库上映射的JPA实体。
它的效果很好,但有一个令人烦恼的问题,我无法解决。
我想spring将这个方法定义转换为带有like运算符的sql查询,该运算符使用_和%作为通配符。无论如何,我担心这些字符在传递给此方法时没有被转义,结果如果我搜索包含_的名称的产品,则会被理解为“任何字符”,由于我的产品使用的命名约定而言,这是不好的。
我需要一种方法,在传递给该方法之前对名称参数进行转义,但我能想到的唯一方法是自己实现该方法,失去了spring data所提供的所有奇妙功能。是否有更优雅的方法来做到这一点?
谢谢!
PS:我正在使用Spring Boot 1.4.0

你遇到了问题吗? - Boris the Spider
我会先检查Spring是否已经转义了%和_字符并生成正确的SQL查询,而不是仅仅假设。你可能是对的,但也许它已经处理好了。打开SQL日志并查看生成的内容。 - JB Nizet
嗨JB,该方法的行为很明显,因为它返回任何字符代替_的产品,所以要么它没有被转义,要么在Spring Data内部存在更大的错误。无论如何,仅查看Hibernate日志就可以确认我所说的:生成的查询使用like运算符,而参数是输入中给定的未转义的参数。 - fer.marino
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接