[SQL] Critieria API를 NHibernate에있는 하위 쿼리에서 선택
SQLCritieria API를 NHibernate에있는 하위 쿼리에서 선택
나는 다음과 같은 구조의 SQL 쿼리가 그래서 :
select p.* from
(
select max([price]) as Max_Price,
[childId] as childNodeId
from [Items] group by [childId]
) as q inner join [Items] as p on p.[price] = q.[Max_Price] and p.[childId] = q.[childNodeId]
내가 기준 API를 사용하여, NHibernate에이 쿼리를 다시 작성해야합니다. 나는 하위 쿼리 API를 사용하여 시도,하지만 내부 쿼리가 외부 쿼리의 속성과 평등을 확인하는 하나의 열을 반환해야 할 것 같다. 그러나, 나는 두 돌아갑니다. 나는 이것이 HQL API를 통해 수행 할 수 있습니다 읽었습니다,하지만 우리는 동적으로 비행에이 같은 쿼리를 생성 할 겁니다으로 나는, 기준 API와 함께 할 필요가있다. 사람이 여기에 올바른 방향으로 날 조종 할 수 있습니까?
해결법
-
==============================
1.나는 약간 원래의 SQL 쿼리를 적용하여 비슷한 문제를 해결하기 위해 관리했습니다. 나는이 (의사 SQL 코드) 같은 것을 함께 종료했습니다
나는 약간 원래의 SQL 쿼리를 적용하여 비슷한 문제를 해결하기 위해 관리했습니다. 나는이 (의사 SQL 코드) 같은 것을 함께 종료했습니다
SELECT p.* FROM [Items] as p WHERE EXISTS ( SELECT [childId] as childNodeId FROM [Items] as q WHERE p.[childId] = q.[childNodeId] GROUP BY q.[childId] HAVING p.[price] = MAX(q.[price]) )
그리고 이것은 QueryOver 구현은 다음과 같습니다
var subquery = QueryOver.Of(() => q) .SelectList(list => list.SelectGroup(() => q.ChildId)) .Where(Restrictions.EqProperty( Projections.Property(() => p.Price), Projections.Max(() => q.Price))) .And(Restrictions.EqProperty( Projections.Property(() => p.ChildId), Projections.Property(() => q.ChildId)));
여기에서 당신은 단지 NHibernate에이 (의사 코드) 제대로하는 엔티티를 해결 할 수 있도록 별칭을 전달해야합니다 :
var filter = QueryOver.Of(() => p) .WithSubquery.WhereExists(GetSubQuery(p, criteria...));
나는이 특정 경우에 도움이되기를 바랍니다.
UPDATE : 기준 API
var subquery = DetachedCriteria.For<Items>("q") .SetProjection(Projections.ProjectionList() .Add(Projections.GroupProperty("q.ChildId"))) .Add(Restrictions.EqProperty("p.Price", Projections.Max("q.Price"))) .Add(Restrictions.EqProperty("p.ChildId", "q.ChildId")); var query = DetachedCriteria.For<Items>("p") .Add(Subqueries.Exists(subquery));
그럼에도 불구하고 나는 QueryOver 버전으로 고집 추천 할 것입니다, 그것은 훨씬 더 직관적이고 당신이 (당신이 NH 버전을 업그레이드 할 필요가 없습니다 특히 있음) 마법 문자열을 피하십시오.
이 당신을 위해 작동하는지 알려 주시기 바랍니다.
from https://stackoverflow.com/questions/6541229/selecting-on-sub-queries-in-nhibernate-with-critieria-api by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] JSON 데이터 타입의 레코드 중첩 된 배열 쿼리 조합 (0) | 2020.07.09 |
---|---|
[SQL] 페이스 북은 운영자와 같은 SQL이 FQL 있습니까? (0) | 2020.07.09 |
[SQL] 현재 날짜를 기준으로 정렬 다가오는 생일 (0) | 2020.07.09 |
[SQL] 두 날짜 사이의 일 수 - ANSI SQL (0) | 2020.07.09 |
[SQL] C # 및 SQL Server 관리 Studio에서 SQL 쿼리의 매우 다른 실행 시간 (0) | 2020.07.09 |