2011-12-21 1 views

답변

6

당신은 직접 조합 할 수 없습니다,하지만 당신은이 미래의 쿼리와 조합 코드의 결과를 수행 할 수 있습니다이 후

var resultSet1 = this.Session.CreateCriteria<A>().Future<A>(); 
var resultSet2 = this.Session.CreateCriteria<B>().Future<B>(); 

을 때 하나 열거 결과 집합, NHibernate에 하나의 쿼리를 실행합니다 여러 결과 세트를 리턴 할 데이터베이스에 전달하십시오. SQL Server를 사용하지 않는 경우 데이터베이스가 여러 결과 집합을 지원하지 않을 수 있습니다.

+0

나는 그것을 시도 할 것이다. 감사합니다 – Mattias

+0

이것은 내 상황에 가장 효과적이었습니다. 감사! – Mattias

6

HQL을 사용해도 가능하지 않습니다. 이 다른 S.O. post

한 가지 방법은 원시 SQL 다시 드롭 명명 된 쿼리

<sql-query name="MyQuery"> 
<![CDATA[ 
select col1,col2 from table1 
union 
select col1,colA from table2 
]]> 
</sql-query> 

를 사용하여/POCO

var query = Session 
    .GetNamedQuery("MyQuery") 
    .SetResultTransformer(new AliasToBeanResultTransformer(typeof(MyDto))); 
    return query.List<MyDto>(); 
+0

열이 다를 수 있으므로 불행히도 옵션이 아닙니다. 팁을 가져 주셔서 감사합니다! +1 – Mattias

3

당신은 사용할 수 있습니다 DTO로 다시 변환하는 AliasToBeanResultTransformer을 사용하는 것입니다 -

NHibernate.Criterion.Restrictions.Or(ICriterion FirstQuery, 
            ICriterion SecondQuery) 

을 하나의 검색어로 기준으로 삼습니다.

+0

아침에 이것을 시도하고 다시 돌아올거야 – Mattias

+0

이것은 또한 작동하지만 기본 클래스와 십자가 테이블을 가진 OR 절 (내가 질문에서 설명 했어야 함) 결과 쿼리는 상당한 성능 저하를 초래합니다. 답변을 주셔서 감사합니다. +1 – Mattias

관련 문제