Hi guys

I just started playing with NHibernate Linq and found a strange
behavior. I have a class Category and a class Product. Category has a
list of Products with one to many association. Here's mappings:

  <class name="Category">
    <id name="Id">
      <generator class="hilo" />
    </id>
    <property name="Name" lazy="false" length="20" />

    <bag name="Products" cascade="none" lazy="false" inverse="true"
fetch="join">
      <key column="CategoryId" />
      <one-to-many class="Product" />
    </bag>
  </class>

  <class name="Product">
    <id name="Id">
      <generator class="hilo" />
    </id>
    <property name="Name" lazy="false" />
    <property name="Discontinued" lazy="false" />
    <property name="Price" lazy="false" />
    <many-to-one name="Category"
             class="Category"
             column="CategoryId"
             cascade="none" />
  </class>

When I query categories with this query
var cs = session.Query<Category>().Where(c => c.Products.Any(p =>
p.Price == 13.3392)).ToList();
I look at NHibernate profiler and see this results

select category0_.Id   as Id1_,
       category0_.Name as Name1_
from   Category category0_
where  exists (select products1_.Id
               from   Product products1_
               where  category0_.Id = products1_.CategoryId
                      and products1_.Price = 13.3392 /* @p0 */)

SELECT products0_.CategoryId   as CategoryId1_,
       products0_.Id           as Id1_,
       products0_.Id           as Id0_0_,
       products0_.Name         as Name0_0_,
       products0_.Discontinued as Disconti3_0_0_,
       products0_.Price        as Price0_0_,
       products0_.CategoryId   as CategoryId0_0_
FROM   Product products0_
WHERE  products0_.CategoryId = 131073 /* @p0 */

SELECT products0_.CategoryId   as CategoryId1_,
       products0_.Id           as Id1_,
       products0_.Id           as Id0_0_,
       products0_.Name         as Name0_0_,
       products0_.Discontinued as Disconti3_0_0_,
       products0_.Price        as Price0_0_,
       products0_.CategoryId   as CategoryId0_0_
FROM   Product products0_
WHERE  products0_.CategoryId = 32768 /* @p0 */

The category is fetched one by one from database. So the amount of
roundtrips to database equals to the amount of category objects is
matched by where clause.

Is there a way to tell NHibernate to optimize the query? I'm
completely lost.

Thank you very much for your support.

-- 
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