This works:
<hibernate-mapping>
    <class name="Train" table="Trains">
        <id column="id" name="id" type="java.lang.String" length="4">
            <generator class="assigned" />
        </id>
        <set name="trips" cascade="all">
            <key column="trainId"/>
            <one-to-many class="Trip"/>
        </set>
    </class>
</hibernate-mapping>
But my trips are all naturally ordered by their scheduledDate. I would like to replace the Set with a List. Changing the collection to:
        <list name="trips" cascade="all" order-by="scheduledDate">
            <key column="trainId"/>
            <one-to-many class="Trip"/>
        </list>
does not work, since it now requires an <index/>. I don't want to add an index to my table, because the ordering is given by the date.
Any way this can be done? Or should I just get the Set from Hibernate, and then sort it myself in code? Seems unnecessary when we already have it ordered by the DB.
Actually, this can be done with <bag>, <set> or <map> mappings. <bag> uses java.util.List semantics but does not maintain element indexes. By specifying it's order-by attribute, its elements will be ordered as part of SELECT:
<bag name="trips" cascade="all" order-by="scheduledDate">
    <key column="trainId"/>
    <one-to-many class="Trip"/>
</bag>
Note that order-by attribute needs to specify column name(s), not property name. The above can be mapped to java.util.List, you can do the same with java.util.Set by using <set> mapping. No need for comparators :-)
Details are here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With