2012-05-04 2 views
0

Java 함수로만 나타나는 복잡한 사용자 지정 조건으로 쿼리 결과를 필터링 할 수 있습니까? 이 기준 함수가 엔티티 생성과 결과 수집 사이에 참여하기를 바랍니다. 나는JPA 쿼리의 결과를 사용자 지정 기준에 따라 필터링하는 방법

@Entity 
@NamedQueries{ 
    @NamedQuery(name="myquery",query="...") 
} 
class MyEntity{ 
    @Id 
    public long id; 

    @Column(name="NAME") 
    public String name; 

    @Column(name="description") 
    public String description; 
} 

내가 myquery을 실행하고 페이징 매개 변수를 지정할 수 있습니다 개체 및 쿼리 다음 한 예를 들어 는 고정 된 크기로 설정 결과를 얻으려면. 하지만 쿼리로 표현할 수없는 몇 가지 추가 필터링을 만들고 싶습니다. 몇 가지 게시물 쿼리 처리 함수를 만들고 쿼리 결과를 필터링하는 데 사용할 경우 페이징 불변성, 페이지 크기가 중단됩니다. 그것은 좋고 편리하지 않을 것입니다.

답변

0

간단한 방법은 없습니다. setFirstResult()setMaxResults() 메서드가 생성 된 SQL 쿼리에 적용됩니다. MySQL에서는 예를 들어 LIMIT (10, 10)이 쿼리의 where 절에 추가됩니다. 따라서 쿼리를 실행 한 후에 결과를 필터링하면 항상 결과 수가 줄어 듭니다.

+0

는 어렵지만 효율적이고 합리적인 방법이 있나요? – gkuzmin

+0

저장 프로 시저를 사용합니까? JDBC를 사용하여 결과 세트를 스크롤하고 페이지 크기가 될 때까지 각 행에 필터를 적용하십시오. Hibernate를 사용한다면, 네이티브 API를 사용하여 질의 결과를 스크롤 할 수 있습니까? –

0

NamedQueries는이를 달성하기위한 잘못된 접근 방식입니다.

즉석에서 쿼리를 작성해야합니다.

EntityManager em=.... 
Query queryObject = em.createQuery(queryString); 

또는

Query queryObject = em.createNativeQuery(queryString); 
관련 문제