2016-08-19 2 views
0

나는 다음과 같은 스프링 데이터 JPA 저장소 있습니다스프링 데이터 JPA 및 startsWith 저장소

@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 엔티티입니다.

꽤 잘 작동하지만, 고칠 수없는 성가신 문제가 있습니다.

스프링은 _%을 와일드 카드로 사용하는 like 연산자를 사용하여 SQL 쿼리에서이 메서드 정의를 변환한다고 가정합니다. 어쨌든이 문자가이 메서드에 전달되면 이스케이프 처리되지 않을까 걱정됩니다. 결과로 _이 포함 된 제품을 검색하면 "모든 문자"로 인식되며 결과는 내 제품에서 사용하는 명명 규칙.

메서드에 전달되기 전에 name 매개 변수를 이스케이프하는 방법이 필요하지만 생각할 수있는 유일한 방법은 스프링 데이터의 모든 마법을 잃어 버리는 메서드를 구현하는 것입니다. 이 일을 더 우아한 방법이 있습니까?

감사합니다. 나는 봄 부팅에게 1.4.0

+0

문제가 발생 했습니까? –

+0

먼저 Spring이 % 및 _ 문자를 이스케이프 처리하지 않고 올바른 SQL 쿼리를 생성하는지 확인합니다. 당신 말이 맞을지도 모르지만, 아마도 이미 그것을 돌봐줍니다. SQL 로깅을 켜고 생성 된 내용을 확인하십시오. –

+0

안녕하세요 JB, 메소드의 동작은 _ 대신 모든 문자가 포함 된 제품을 반환하므로 분명하거나 이스케이프 처리되지 않았거나 스프링 데이터 내부의 더 큰 버그가 있습니다. 어쨌든 그냥 최대 절전 모드 로그를보고 내가 말한대로 확인 : 생성 된 쿼리는 같은 연산자를 사용하고 매개 변수는 입력에서 주어진 하나의 이스케이프되지 않습니다. –

답변

관련 문제