Maison >développement back-end >C++ >Comment récupérer les requêtes avec la dernière réponse réussie à l'aide de QueryOver de NHibernate ?
Récupération des requêtes avec la réponse réussie la plus récente à l'aide de QueryOver de NHibernate
Dans les scénarios impliquant une relation un-à-plusieurs (HasMany) entre les entités Request
et Response
, récupérer efficacement tous les objets Request
associés à leur dernier Response
réussi est une tâche courante. Cela peut être accompli avec élégance à l'aide de l'API QueryOver de NHibernate.
Examinons un modèle simplifié :
<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>
Les étapes suivantes montrent comment construire la requête 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>
Cette approche exploite les sous-requêtes pour filtrer efficacement les Request
entités en fonction de l'existence d'une Response
réussie avec l'horodatage le plus récent, reflétant la fonctionnalité d'une requête SQL complexe au sein de la base de données elle-même.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!