-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Criteria Query question
PostPosted: Mon Jun 25, 2007 5:59 pm 
Regular
Regular

Joined: Mon Mar 20, 2006 10:49 pm
Posts: 59
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


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jun 26, 2007 1:47 pm 
Contributor
Contributor

Joined: Wed May 11, 2005 4:59 pm
Posts: 1766
Location: Prague, Czech Republic
I don't think it's possible using criteria queries, use HQL.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.