Relevant platform details:
Hibernate 2.1.2
Spring 1.0.1
jdk1.4.2
MySQL 4.0.16-standard
Hi all. I'm trying to rewite an HQL query for use in a search page and I want to use the query by Criteria API. However, I am having problems querying on a property of a set element that is a composite-element. It worked just fine in HQL but it is not working in the Criteria API.
The old HQL query that worked fine was this:
Code:
select page from org.tolweb.hibernate.MappedAccessoryPage as page join page.contributors as contributors where contributors.contributorId = :contributor_id
The query by Criteria code is this:
Code:
Criteria criteria = session.createCriteria(MappedAccessoryPage.class);
criteria.createAlias("contributors", "contributors");
criteria.add(Expression.eq("contributors.contributorId", new Integer(contr.getId()));
When I run that Criteria code I get this exception:
Code:
net.sf.hibernate.MappingException: collection was not an association: org.tolweb.hibernate.MappedAccessoryPage.contributorsnet.sf.hibernate.MappingException: collection was not an association: org.tolweb.hibernate.MappedAccessoryPage.contributors at net.sf.hibernate.type.PersistentCollectionType.getAssociatedClass(PersistentCollectionType.java:213) at net.sf.hibernate.impl.CriteriaImpl.getClassForPath(CriteriaImpl.java:328) at net.sf.hibernate.impl.CriteriaImpl.createAlias(CriteriaImpl.java:285) at net.sf.hibernate.impl.CriteriaImpl.createAlias(CriteriaImpl.java:261) at
Is it not possible to do this sort of querying in the Query by Criteria API or did I screw something else up?
Thanks for your time, and here is the mapping doc:
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class
name="org.tolweb.hibernate.MappedAccessoryPage"
table="ACCESSORY_PAGES"
dynamic-update="false"
dynamic-insert="false"
>
<id
name="accessoryPageId"
column="id"
type="java.lang.Long"
unsaved-value="null"
>
<generator class="native">
</generator>
</id>
<set
name="contributors"
table="ACC_PAGE_CONTRIBUTORS"
lazy="false"
inverse="false"
cascade="none"
sort="natural"
order-by="page_order asc"
>
<key
column="page_id"
>
</key>
<composite-element
class="org.tolweb.treegrow.page.AccessoryPageContributor"
>
<property
name="order"
type="int"
update="true"
insert="true"
access="property"
column="page_order"
/>
<property
name="contributorId"
type="int"
update="true"
insert="true"
access="property"
column="contributor_id"
/>
<property
name="isAuthor"
type="boolean"
update="true"
insert="true"
access="property"
column="is_author"
/>
<property
name="isContact"
type="boolean"
update="true"
insert="true"
access="property"
column="is_contact"
/>
<property
name="isCopyOwner"
type="boolean"
update="true"
insert="true"
access="property"
column="is_copy_owner"
/>
</composite-element>
</set>
<property
name="submittedContributorId"
type="java.lang.Long"
update="true"
insert="true"
access="property"
column="submitted_contributor_id"
/>
<property
name="submissionDate"
type="java.util.Date"
update="true"
insert="true"
access="property"
column="submission_date"
/>
<property
name="isSubmitted"
type="boolean"
update="true"
insert="true"
access="property"
column="is_submitted"
/>
<property
name="isTreehouse"
type="boolean"
update="true"
insert="true"
access="property"
column="is_treehouse"
/>
<property
name="menu"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="menu"
/>
<property
name="pageTitle"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="page_title"
/>
<property
name="copyright"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="page_copyrightholder"
/>
<property
name="copyrightYear"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="page_copyrightdate"
/>
<property
name="text"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="main_text"
/>
<property
name="references"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="refs"
/>
<property
name="status"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="status"
/>
<property
name="useContent"
type="boolean"
update="true"
insert="true"
access="property"
column="use_content"
/>
<set
name="internetLinks"
table="InternetLinks"
lazy="false"
inverse="false"
cascade="none"
sort="natural"
order-by="link_order asc"
>
<key
column="acc_page_id"
>
</key>
<composite-element
class="org.tolweb.treegrow.page.InternetLink"
>
<property
name="order"
type="int"
update="true"
insert="true"
access="property"
column="link_order"
/>
<property
name="comments"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="comments"
/>
<property
name="siteName"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="siteName"
/>
<property
name="url"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="url"
/>
</composite-element>
</set>
<set
name="nodesSet"
table="Acc_Pages_To_Nodes"
lazy="false"
inverse="false"
cascade="none"
sort="unsorted"
>
<key
column="acc_page_id"
>
</key>
<many-to-many
class="org.tolweb.hibernate.MappedNode"
column="node_id"
outer-join="auto"
/>
</set>
<property
name="contributorId"
type="int"
update="true"
insert="true"
access="property"
column="contributor_id"
/>
<property
name="usePermission"
type="byte"
update="true"
insert="true"
access="property"
column="use_permission"
/>
<property
name="acknowledgements"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="acknowledgements"
/>
<property
name="notes"
type="java.lang.String"
update="true"
insert="true"
access="property"
column="notes"
/>
</class>
</hibernate-mapping>