2009-11-25 4 views
2

이 질문을하기 전에 나는 약간의 시간 동안 봤지만이 주제와 관련된 정보를 찾을 수 없었다.PostgresSQL의 SELECT DISTINCT ON()을 호출하는 Hibernate

내 문제는 간단하다 :

내가 NHibernate에 기준 및 프로젝션이 내가 DISTINCT ON (열)을 설정하기 위해 노력하고있어

투사에 대한 나의 코드는 다음입니다

:

 criteria.SetProjection(
      Projections.ProjectionList() 
      .Add(Projections.Distinct(Projections.Property("ID"))) 
      .Add(Projections.Property("A")) 
      .Add(Projections.Property("B")) 
     ); 

이를 다음과 같은 SQL (비트 단순화)을 생성합니다 :

SELECT DISTINCT ID, A, B FROM ABC ORDER BY A 

하지만 불행히도 pe 이 쿼리가 매우 빈약 할 경우 적합성.

SELECT DISTINCT ON (A) ID, A, B FROM ABC ORDER BY A 

내가 NHibernate에 난 그냥 보여 그 SQL을 생성 할 수 있습니다 어쨌든 있나요 :

내가 훨씬 더 빨리 실행하고 다음과 같습니다 내 SQL을 최적화했다? 이 문제는 NHibernate의 방언으로 해결할 수 있습니까?

귀하의 의견을 기다리십시오! 대단히 감사합니다!

답변

0

이것은 가장 우아한 해결책은 아니지만 "SQLProjection"을 사용하여 필요한 것을 얻을 수 있는지 궁금합니다. 코드가 정확히 바로 여기하지 않을 수 있도록 나는 자바 사람 해요,하지만 그것은 나를 포스트 그레스를 사용하여 작동처럼 다음과 같은 접근 방식은 같습니다

당신이 당신의 질문에 준 최적화 된 SQL 쿼리를 생성
criteria.SetProjection(
    Projections.ProjectionList() 
    .Add(Projections.SqlProjection("DISTINCT ON(A) ID")) 
    .Add(Projections.Property("A")) 
    .Add(Projections.Property("B")) 
); 

. 다시 한 번 말하지만,이 방법은 매우 동적 인 작업을 수행하는 경우 작동하지 않을 수 있지만, 방법으로 문제를 해결합니다.