views:

108

answers:

1

I'm trying to pull back a list of items that have a specific type of item in a set.

For example:

<class name="Owner" table="OWNER">
<id name="id" column="OWNER_ID" />
<set name="cats" table="OWNER_CATS" lazy="false">
    <key column="OWNER_ID" />
    <many-to-many class="Cat" />
</set>

<class name="Cat" table="CAT" discriminator-value="C">
<id name="id" column="CAT_ID" />
<discriminator column="type" type="character" />

<subclass name="Lion" discriminator-value="L">
    <property name="teeth" />
</subclass>
</class>

Using restrictions how would I get a list of owners who have lions as pets?

I've tried something along the lines of the following to no avail:

criteria.createCriteria("cats").add(Restrictions.eq("class", Lion.class));
+1  A: 

At the moment (though I'm not sure if this is intentional) the way this works is you have to specify the discriminator value as the restriction value, rather than the class itself, so:

criteria.createCriteria("cats").add(Restrictions.eq("class", "L"));

in your example.

Mat Mannion