>From your exmaple you already know the post id so you gain nothing by
effectively doing a complex query incolving both posts and comments.
A separate query for comments is definately the way I'd approach this.

Queries generally return a list of objects of a particular type
matching the query criteria - not a whole pre-filtered object graphs
setup to match the details from the query criteria.
Once you access an object returned by a query, you'll get whatever the
mapping for that object is setup to give you. As you say, you could
use a filter on the mapping but that filter would be applied every
time you load a post and then access its comments.

Hope this helps,

Brendan

On Jul 14, 10:24 pm, Phillip <[email protected]> wrote:
> Given the example of a Post with many Comments.
>
> Comments has a rating against it.
>
> If I wanted to query for a Post + all Comments with a rating greater
> than 3, I can generate the correct query like:
>
> var result = session.CreateCriteria(typeof(Post))
>                   .Add(Restrictions.Eq("id", id))
>                   .CreateCriteria("Comments", "c")
>                   .Add(Restrictions.Gt("c.Rating", 5))
>                   .SetResultTransformer(new
> RootEntityResultTransformer())
>                   .List<Post>()[0];
>
> or
>
> var result = session.QueryOver<Post>()
>     .Where(x => x.Id == id)
>         .JoinQueryOver(x => x.Comments, () => comment)
>         .Where(x => x.Rating > 3)
>     .SingleOrDefault();
>
> These produce SQL like so:
>
> SELECT this_.Id          as Id3_1_,
>        this_.Title       as Title3_1_,
>        comment1_.Id      as Id2_0_,
>        comment1_.Rating   as Rating2_0_,
>        comment1_.PostId  as PostId2_0_
> FROM   [Post] this_
>        inner join [Comment] comment1_
>          on this_.Id = comment1_.PostId
> WHERE  this_.Id = 'ca6c944d-ca94-49e2-a79c-9f2001687076' /* @p0 */
>        and comment1_.Rating > 5 /* @p1 */
>
> However, the results from Comment are not added to Post, so when
> looking at the Comment's property, it lazy-loads the Comments
> resulting in ALL comments to be loaded.
>
> Now I realize that I could use a Filter on the mapping to achieve
> this. However that limits me from doing more advanced queries on
> 'Comment' such as 'WHERE Status IN (1, 3, 5)'
>
> Is this a bug? Or is the only way to achieve this sort of
> functionality by separately querying for Comments.

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to