NHibernate의 QueryOver를 사용하여 가장 최근에 성공한 응답이 포함된 요청 검색
Request
과 Response
엔터티 간의 일대다 관계(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 중국어 웹사이트의 기타 관련 기사를 참조하세요!