Question

Ceci fonctionne:

<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>

Mais mes voyages sont tous naturellement ordonnés par leur scheduledDate. Je voudrais remplacer le Set par un List. Modification de la collection en:

        <list name="trips" cascade="all" order-by="scheduledDate">
            <key column="trainId"/>
            <one-to-many class="Trip"/>
        </list>

ne fonctionne pas, car il nécessite maintenant un <index/>. Je ne souhaite pas ajouter d'index à ma table car l'ordre est donné par la date .

Est-ce que cela peut être fait? Ou devrais-je simplement obtenir le <=> auprès d'Hibernate, puis le trier moi-même dans le code? Cela semble inutile alors que nous l'avons déjà commandé par la DB.

Était-ce utile?

La solution

En fait, cela peut être fait avec des mappages <bag>, <set> ou <map>. java.util.List utilise order-by la sémantique mais ne conserve pas les index d'élément. En spécifiant son java.util.Set attribut, ses éléments seront classés dans le cadre de SELECT:

<bag name="trips" cascade="all" order-by="scheduledDate">
    <key column="trainId"/>
    <one-to-many class="Trip"/>
</bag>

Notez que <=> l'attribut doit spécifier un nom de colonne , pas un nom de propriété. Ce qui précède peut être associé à <=>, vous pouvez faire de même avec <=> en utilisant <=> le mappage. Pas besoin de comparateurs: -)

Les détails sont ici

Autres conseils

Je me suis rendu compte que l'utilisation d'un List n'est pas la bonne façon de stocker une collection d'éléments naturellement commandés.

La solution consiste à utiliser un SortedSet (comme un TreeSet) avec un Comparator.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top