Hibernate version: 1.2 GA
Mapping documents:
... relevant portion of Employee mapping ...
<set name="EmployeeOffices" table="AddressBook.EmployeeOfficePeopleImportView">
<key column="EmployeeId"/>
<composite-element class="EmployeeOffice">
<parent name="Employee"/>
<many-to-one name="Office" class="Office" column="OfficeId"/>
<property name="ValidFrom" column="ValidFromDate"/>
<property name="ValidTo" column="ValidToDate"/>
</composite-element>
</set>
... Office mapping ...
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Monitor.Udr.Application.MonitorDirectory.DomainModel" assembly="Monitor.Udr.Application.MonitorDirectory">
<class name="Office" lazy="false" mutable="false" table="AddressBook.OfficeCommonImportView">
<cache usage="read-only"/>
<id type="Int32" name="OfficeId" unsaved-value="0">
<generator class="identity"/>
</id>
<property name="OfficeName" column="Office"/>
<set name="OfficeRooms">
<key column="OfficeId"/>
<one-to-many class="Room"/>
</set>
</class>
<class name="Room" table="AddressBook.RoomLocationCommonImportView">
<cache usage="read-only"/>
<id type="Int32" name="RoomId" unsaved-value="0">
<generator class="identity"/>
</id>
<property name="RoomNumber"/>
<many-to-one name="Office" class="Office" lazy="proxy" column="OfficeId" cascade="all" not-null="true"/>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
ICriteria crit = SessionManager.CurrentSession.CreateCriteria(typeof(Employee));
crit = crit.Add(new LikeExpression("LastName", txtLastName.Value, MatchMode.Start));
arrWhereLogic[0] = UdrUtils.GetSQLLikeFromInput("LastName", txtLastName.Value);
crit = crit.Add(new LikeExpression("FirstName", txtFirstName.Value, MatchMode.Start));
arrWhereLogic[1] = UdrUtils.GetSQLLikeFromInput("FirstName", txtFirstName.Value);
crit = crit.CreateCriteria("EmployeeOffices.Office", "o");
crit = crit.Add(new InExpression("o.OfficeId", new object[] { drpOffice.SelectedValue }));
IList emps = crit.List();
Full stack trace of any exception that occurs:
collection was not an association: Monitor.Udr.Application.MonitorDirectory.DomainModel.Employee.EmployeeOffices
at NHibernate.Type.CollectionType.GetAssociatedClass(ISessionFactoryImplementor factory) in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Type\CollectionType.cs:line 268
at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetPathJoinable(String path) in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Loader\Criteria\CriteriaQueryTranslator.cs:line 230
at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetPathEntityName(String path) in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Loader\Criteria\CriteriaQueryTranslator.cs:line 247
at NHibernate.Loader.Criteria.CriteriaQueryTranslator.CreateCriteriaEntityNameMap() in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Loader\Criteria\CriteriaQueryTranslator.cs:line 198
at NHibernate.Loader.Criteria.CriteriaQueryTranslator..ctor(ISessionFactoryImplementor factory, CriteriaImpl criteria, Type rootEntityName, String rootSQLAlias) in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Loader\Criteria\CriteriaQueryTranslator.cs:line 62
at NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable persister, ISessionFactoryImplementor factory, CriteriaImpl rootCriteria, Type rootEntityName, IDictionary enabledFilters) in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Loader\Criteria\CriteriaLoader.cs:line 37
at NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria, IList results) in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Impl\SessionImpl.cs:line 4939
at NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria) in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Impl\SessionImpl.cs:line 4906
at NHibernate.Impl.CriteriaImpl.List() in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Impl\CriteriaImpl.cs:line 304
at NHibernate.Impl.CriteriaImpl.Subcriteria.List() in C:\sandbox\IR\MonitorDirectory\NHibernate\src\Impl\CriteriaImpl.cs:line 109
at Monitor.Udr.Application.MonitorDirectory.Web.SearchMonitorPeople.BindDataForDataGrid() in C:\sandbox\IR\MonitorDirectory\Monitor.Udr.Application.MonitorDirectory\Monitor.Udr.Application.MonitorDirectory.Web\SearchMonitorPeople.aspx.cs:line 336
at Monitor.Udr.Application.MonitorDirectory.Web.SearchMonitorPeople.imgPeopleSearch_Click(Object sender, ImageClickEventArgs e) in C:\sandbox\IR\MonitorDirectory\Monitor.Udr.Application.MonitorDirectory\Monitor.Udr.Application.MonitorDirectory.Web\SearchMonitorPeople.aspx.cs:line 593
Name and version of the database you are using:
SQL/Server 2005
I have a many-to-many association between Employee and Office represented by EmployeeOffice which has an Employee reference, an Office reference and a couple of dates. I'm trying to retrieve Employees via a criteria query, but I can't get it to work - I get a 'collection was not an association' exception. Is what I am trying to do possible using criteria queries? If so, what am I doing wrong?
Thanks for any assistance.
_________________ Mike Abraham
|