2012-02-09 2 views
0

최대 절전 모드, 스트럿츠 및 extjs를 사용하는 웹 응용 프로그램에서 작업 중입니다. 여기에 제 시나리오가 있습니다. 내 제품 테이블에서html에서 distinct를 사용하는 방법

String hql = "from product"; 

세 개의 열은 이름, 섹션

I 제품의 고유 한 이름을 기준으로 결과를 필요로하지만 난 유일한 옵션은 HQL 쓰고있는 다른 옵션이 ID가 없습니다.

나는에 의해 그룹을 사용할 수 있지만 내가 같은 방법을 사용하는 모든 DAO이다 일반적인 방법입니다 그래서 코드 위의 내 코드에서

hql.list().get(0);를 사용하고 결과

의 크기를해야합니다.

조인을 사용할 수 있지만 데이터가 수백만이기 때문에 쿼리 실행이 너무 느립니다. 이렇게하면 hql에 고유 키워드를 쓰는 방법을 쉽게 이해할 수 있습니다.

+0

귀하의 질문이 명확하지 않다 당신이 그런 AutoComplement 예정대로 AJAX에서 그것을 할 수 있습니다.. 당신이 무엇을 선택 하시겠습니까? 고유 한 제품 이름의 수는 무엇입니까? –

+0

고유 한 제품 이름을 가진 제품 데이터를 원한다면, 기본 키 id에는 다른 값이 있으므로이를 무시해야합니다. 만약 내가 데이터를 얻으면 나는 자동적으로 카운트를 얻을 것이다 – Bindu

답변

0

다음은 우리가 사용하는 html 코드입니다. (이름이 신원을 보호하기 위해 변경되었습니다)

String queryString = "select distinct f from Foo f inner join foo.bars as b" + 
       " where f.creationDate >= ? and f.creationDate < ? and b.bar = ?"; 
     return getHibernateTemplate().find(queryString, new Object[] {startDate, endDate, bar}); 

그것은 HQL에서 "별개"키워드는 SQL에서 "별개"키워드에 직접 매핑하지 않는 것을 주목할 필요가있다.

HQL에서 "distinct"키워드를 사용하면 Hibernate는 때때로 고유 한 SQL 키워드를 사용하지만 경우에 따라 결과 변환을 사용하여 별개의 결과를 생성합니다. 당신이 외부를 사용하는 예를 들어 다음과 같이 조인

왼쪽 o.lineItems

이 경우 SQL 레벨에서 중복을 필터링 할 수 없습니다를 가져 가입 O를, 주문에서 오 별개의 최대 절전 모드를 선택 있도록 SQL 쿼리가 수행 된 후 resultTransformer를 사용하여 중복을 필터링합니다.

+0

나는 동일한 테이블에서 고유 한 것을 사용해야하지만 프라이 머리 키 id는 프라이 머리 키 값을 무시하고 싶은 다른 값을 가지고있다. 나는 단지 제품의 고유 한 값을 가진 제품의 데이터를 원한다. 이름은 중복되기 때문에 이름.나는 같은 쿼리를 사용하여 제품 P에서 별개 p를 선택하지만 그 모든 레코드를 보여주는 나는 제품 p에서 별개 (p.name)와 같은 쿼리를 원한다. 최대 절전 모드가 아니라이 유형이 필요하다. – Bindu

+0

응답 해 주셔서 감사합니다 jramay – Bindu

0

Distinct 필드를 사용하기 위해 최대 절전 모드 쿼리 언어에 대한 대답을 얻었습니다. 을 사용할 수 있습니다. SQL 쿼리를 사용하면 String List를 반환합니다. 엔티티 클래스에 의해 반환 값을 사용할 수 없습니다. 그래서 문제 유형을 풀기위한 답은 SQL과 함께 HQL을 사용하는 것입니다.

"(FLIGHT_ROUTE SF GROUP BY SF.TO_CITY FROM SELECT SF.ROUTE_ID) F.ROUTE_ID
IN이 FLIGHT_ROUTE F FROM

,

SQL 쿼리 문에서이 목록으로 DISTINCT ROUTE_ID 입력을 가지고 . 그리고 쿼리에서 IN (목록).

반환 유형은 엔티티 빈의 유형에서 별개의 TO_CITY를 필터링 할 수 있습니다.

관련 문제