I'm wondering if someone could help me resolve an issue where I'm
trying to eager fetch a collection (one to many) assocation using
ICriteria. The upfront SQL looks valid as it is retrieving the
collection properties data but what happens is that when I then access
my collection property, a SELECT statement is re-executed.
My entity graph is:
Landing-------<Zone ----< ZoneWidget >--- Widget
My ICriteria is...
IList<Zone> zones = this.NHibernateSession.CreateCriteria(typeof
(Zone))
.CreateAlias("Landing", "l")
.CreateAlias("ZoneWidgets", "zw")
.CreateAlias("zw.Widget", "w")
.Add(Expression.Eq("l.Line", line))
.SetResultTransformer(new
NHibernate.Transform.DistinctRootEntityResultTransformer())
.AddOrder(new NHibernate.Criterion.Order("Sequence",
true))
.AddOrder(new NHibernate.Criterion.Order(string.Format
("zw.Sequence"), true))
.List<Zone>();
My logic is this...
foreach(Zone zone in zones)
{
// this ZoneWidgets collection association invokes another SQL
SELECT for ZoneWidgets
foreach(ZoneWidget zoneWidget in zones.ZoneWidgets)
{
Widget widget = zoneWidget.Widget //doesn't cause
another SELECT
string name = widget.Name //again, doesn't cause another
SELECT
}
}
--------------------------------------------------------------------------------------------------
Here are my mapping files (sorry for the length)
[[[[[[[[[[[[[[[ Zone.hbm.xml ]]]]]]]]]]]]]
<hibernate-mapping default-cascade="none" xmlns="urn:nhibernate-
mapping-2.2">
<class name="Zone" table="Zone" schema="dbo">
<!-- Primary Key Mapping -->
<id name="ID" column="ZoneID" unsaved-value="0">
<generator class="native" />
</id>
<!-- Column Mapping -->
<property name="Name" column="Name" />
<property name="Description" column="Description" />
<property name="Sequence" column="Sequence" />
<!-- Relationship Mapping -->
<many-to-one name="Landing" class="Landing" fetch="select">
<column name="LandingID" not-null="true" />
</many-to-one>
<bag name="ZoneWidgets" inverse="true" cascade="none"
fetch="join">
<key>
<column name="ZoneID" not-null="true" />
</key>
<one-to-many class="ZoneWidget" />
</bag>
</class>
</hibernate-mapping>
[[[[[[[[[[[[[[[ ZoneWidget.hbm.xml ]]]]]]]]]]]]]
<hibernate-mapping default-cascade="none" xmlns="urn:nhibernate-
mapping-2.2">
<class name="ZoneWidget" table="ZoneWidget" schema="dbo">
<!-- Primary Key Mapping -->
<id name="ID" column="ZoneWidgetID" unsaved-value="0">
<generator class="native" />
</id>
<!-- Column Mapping -->
<property name="Sequence" column="Sequence" />
<!-- Relationship Mapping -->
<many-to-one name="Widget" class="Widget" fetch="select">
<column name="WidgetID" not-null="true" />
</many-to-one>
<many-to-one name="Zone" class="Zone" fetch="select">
<column name="ZoneID" not-null="true" />
</many-to-one>
<bag name="ZoneWidgetParameters" inverse="true" cascade="none">
<key>
<column name="ZoneWidgetID" not-null="true" />
</key>
<one-to-many class="ZoneWidgetParameter" />
</bag>
</class>
</hibernate-mapping>
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---