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