2010-02-22 3 views
1

이처럼 오늘날 무엇인가가 왔으며, criteria 쿼리에서 그것을 해결하는 동등한 방법이 있는지 궁금해하고있었습니다.NHibernate Criteria Queries를 이용한 복잡한 Ordering

기본적으로 테이블이 있으며이 테이블에는 두 개의 null 입력 가능 문자열 필드 (foo 및 bar)가 있습니다. 우리는 이들을 종합하여 소망하고 싶습니다.

문자열 연결 (order by foo + bar desc)은 값 중 하나가 null이면 null을 반환하고, order by foo, bar은 필요에 따라 null을 고려하지 않습니다. 내가 NHibernate에의 토크 ​​나이 내에서 세부 사항을 모르겠어요

SELECT foo, bar, (ISNULL(foo,'') + ISNULL(bar,'')) as f 
FROM foobar 
ORDER BY f DESC 

, 그러나 당신이 인 경우에 같은 쿼리를 사용

SELECT foo, bar 
FROM foobar 
ORDER BY (ISNULL(foo,'') + ISNULL(bar,'')) DESC 

로 작성 : 같은

SQL의 솔루션을 볼 수 있었다 그것은 foo와 bar를 각각의 정렬 표현식으로 파싱하기 때문에 그것은 질식합니다.

그럼 ... 기준 쿼리에서 어떻게 작성 하시겠습니까? 그러한 메소드가 있을지, 아니면 새로운 ResultTransformer 또는 이후의 정렬 만이 유일한 옵션일까요?

답변

3

해당 수식이 포함 된 쿼리 전용 속성 (access="noop", http://ayende.com/Blog/archive/2009/06/10/nhibernate-ndash-query-only-properties.aspx 참조)을 만들어야합니다. 예를 들어

,

<property name="SortableFoo" formula="ISNULL(foo,'')"/> 

그리고 "속성"을 할 수 있습니다 지금 AddOrder.

+0

매우 흥미 롭습니다. 슬픈, 솔루션은 기준 레벨보다는 바인딩 레벨에있는 것처럼 보입니다. =/ – ddango

+0

사실, 저는 이것이 Projections, SQLFunctions 및 그런 종류의 것들을 사용하여 수행 될 수 있다고 생각합니다. 그러나 나는 그것이 훨씬 더 복잡하다고 생각합니다. 반면에 HQL을 사용하면 SQL과 크게 다르지 않습니다. 너 그거 해봤 니? –

관련 문제