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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-15 07:07:45316검색

How to Retrieve Requests with the Latest Successful Response Using NHibernate's QueryOver?

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

RequestResponse 엔터티 간의 일대다 관계(HasMany)와 관련된 시나리오에서는 최근 성공한 Request과 관련된 모든 Response 개체를 효율적으로 가져오는 것이 일반적인 작업입니다. 이는 NHibernate의 QueryOver API를 사용하여 우아하게 수행할 수 있습니다.

간단한 모델을 살펴보겠습니다.

<code class="language-csharp">public class Request
{
    public virtual IList<Response> Responses { get; set; }
}

public class Response
{
    public virtual DateTime Timestamp { get; set; }
    public virtual bool Success { get; set; }
    public virtual Request Request { get; set; } // Added for clarity
}</code>

다음 단계에서는 QueryOver 쿼리를 구성하는 방법을 보여줍니다.

<code class="language-csharp">// Subquery to identify the maximum timestamp for successful responses per Request
Response responseAlias = null;
IQueryOver<Response> subquery = QueryOver.Of<Response>(() => responseAlias)
    .Where(r => r.Request.Id == responseAlias.Request.Id) // Join condition
    .Select(Projections.Max<Response>(r => r.Timestamp));

// Subquery to filter for successful responses with the maximum timestamp
IQueryOver<Response> successSubquery = QueryOver.Of<Response>(() => responseAlias)
    .WithSubquery.WhereProperty(r => r.Timestamp).Eq(subquery)
    .Where(r => r.Success == true);


// Main query to retrieve Requests
Request requestAlias = null;
IQueryOver<Request> query = session.QueryOver<Request>(() => requestAlias);
query.WithSubquery.WhereExists(() => successSubquery);

// Execute the query
IList<Request> requests = query.List();</code>

이 접근 방식은 하위 쿼리를 활용하여 최신 타임스탬프가 포함된 성공적인 Request 존재 여부를 기반으로 Response 항목을 효율적으로 필터링하고 데이터베이스 자체 내의 복잡한 SQL 쿼리 기능을 미러링합니다.

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

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