>백엔드 개발 >C++ >NHibernate QueryOver를 사용하여 최근 성공적인 응답으로 요청을 검색하는 방법은 무엇입니까?

NHibernate QueryOver를 사용하여 최근 성공적인 응답으로 요청을 검색하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-15 09:13:47462검색

How to Retrieve Requests with Their Latest Successful Response Using NHibernate QueryOver?

NHibernate QueryOver를 사용하여 가장 최근에 성공한 응답이 포함된 요청 검색

이 예는 최근 성공한 Request과 연관된 모든 Response 엔터티를 검색하는 정교한 NHibernate QueryOver 쿼리를 보여줍니다. Request 엔터티에는 Response 엔터티 컬렉션이 있습니다. RequestResponse을 기반으로 가장 최근에 성공한 Response과 함께 Timestamp만을 가져오는 것을 목표로 합니다.

아래 솔루션은 중첩된 하위 쿼리를 활용하여 이러한 복잡한 검색을 수행합니다. Response 엔터티에 "IsActive" 플래그가 포함되어 있으면 더 간단한 접근 방식이 가능할 수 있습니다.

NHibernate QueryOver 구현은 다음과 같습니다.

<code class="language-c#">// Reference to a Response entity
Response responseAlias = null;

// Subquery to find the maximum DateTime for each RequestId
var maxTimestampSubquery = QueryOver.Of<Response>(() => responseAlias)
    .SelectList(l => l
        .SelectGroup(() => responseAlias.RequestId)
        .SelectMax(() => responseAlias.DateTime)
    );

// Subquery to find successful Responses with the maximum DateTime
var successfulResponseSubquery = QueryOver.Of<Response>(() => responseAlias)
    .Where(() => responseAlias.Success == true)
    .WithSubquery
    .WhereProperty(() => responseAlias.DateTime).In(maxTimestampSubquery);


// Main query to retrieve Requests with successful Responses
var query = session.QueryOver<Request>();
query.WithSubquery
    .WhereProperty(r => r.Id)
    .In(successfulResponseSubquery.Select(r => r.RequestId));

var requests = query.List<Request>();</code>

이 코드는 하위 쿼리를 사용하여 관련 Response 항목을 효율적으로 식별하고 이를 해당 Request 항목에 연결합니다. maxTimestampSubquery는 각 요청의 최신 타임스탬프를 찾고, successfulResponseSubquery 필터는 해당 타임스탬프와 일치하는 성공적인 응답을 찾습니다. 그런 다음 기본 쿼리는 성공적인 응답 하위 쿼리에서 찾은 ID를 기반으로 Request 엔터티를 검색합니다. RequestResponse을 실제 엔터티 이름으로 바꾸고 이에 따라 속성 이름을 조정하는 것을 잊지 마세요.

위 내용은 NHibernate QueryOver를 사용하여 최근 성공적인 응답으로 요청을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.