2014-12-22 2 views
2

JPG와 함께 PostgreSQL에서 play를 사용하고 jpql을 만드는 데 문제가 있습니다. 다음은 PostgreSQL에 대한 jpql 쿼리의 매개 변수 objectname

는 나의 열 이름은 쿼리 동적 내 모델 코드

public static List<Jobseekers> search(String key, String keyvalue) { 
     @SuppressWarnings("unchecked") 
     List<Jobseekers> empList = JPA.em().createQuery("FROM Jobseekers WHERE :key LIKE :keyvalue").setParameter("key", key).setParameter("keyvalue", "%"+keyvalue+"%").getResultList(); 
     System.out.println("key is"+key); 
     return empList; 
    } 

입니다

생성되는 SQL은 이름이 키

입니다

select * from jobseekers where 'name' like '%akash%' 

같은

위의 쿼리는 이름 열 이름에 appostrophe (')로 인해 빈 목록을 제공합니다.

내 문제는 정확한 결과를 얻을 수 있도록 열 이름 ('이름')에서 appostrophe (')를 제거하는 방법입니다.

+1

아포스트로피를 피하는 방법은 문제가 아닙니다. 문제는': key'가있는 준비된 명령문이 값을 처리하는 방식으로 동적 SQL을 처리하지 않는다는 것입니다. 나는 답을 모른다. 그러나 이것을 반영하기 위해 제목과 아마도 질문을 바꾸어야한다. – funkwurm

+0

아마 ** [도움이됩니다] (http://stackoverflow.com/questions/3617687/is-it-possible-to-dynamically-define-column-names-in-hibernate-jpa) **? – funkwurm

답변

1

개체 이름을 매개 변수화 할 수 없습니다. 매개 변수는 값에만 사용됩니다. 쿼리 자체에 key을 포함시켜야합니다 (잠재적으로 SQL 주입을 위해 열립니다!).

그래서 당신은 할 필요가 :

List<Jobseekers> empList = JPA.em().createQuery("FROM Jobseekers WHERE " + 
     key + " LIKE :keyvalue") 
    .setParameter("keyvalue", "%"+keyvalue+"%") 
    .getResultList(); 

다른 옵션은 쿼리를 작성하는 기준 API를 사용하는 것입니다,하지만 훨씬 더 복잡하다; 저는 그것을 많이 사용하지 않았기 때문에 예제를 드릴 수는 없습니다.

+0

쿼리에서 뭔가를 연결할 때 SQL 주입 공격을받을 수 있으므로주의하십시오. – uaiHebert

+0

@uaiHebert 정확히 내가 왜 내 대답에 언급합니다. –