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.