首页 >后端开发 >C++ >如何使用 NHibernate 的 QueryOver 检索具有最新成功响应的请求?

如何使用 NHibernate 的 QueryOver 检索具有最新成功响应的请求?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-15 07:07:45313浏览

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