vistas mapeo mapear herencia con asociaciones hibernate list collections mapping order

mapeo - mapear en hibernate



Asignación de una lista en hibernación ordenando en lugar de un campo de índice (2)

En realidad, esto se puede hacer con mapeos <bag> , <set> o <map> . <bag> usa semántica java.util.List pero no mantiene índices de elemento. Al especificar su order-by atributo, sus elementos se ordenarán como parte de SELECT:

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

Tenga en cuenta que el atributo order-by debe especificar el nombre (s) de columna , no el nombre de propiedad. Lo anterior se puede mapear a java.util.List , puede hacer lo mismo con java.util.Set utilizando la asignación <set> . Sin necesidad de comparadores :-)

Los detalles estan aqui

Esto funciona:

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

Pero mis viajes están naturalmente ordenados por su scheduledDate . Me gustaría reemplazar el Set con una List . Cambiar la colección a:

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

no funciona, ya que ahora requiere un <index/> . No deseo agregar un índice a mi tabla, porque el orden viene dado por la fecha .

De cualquier manera esto se puede hacer? ¿O debería simplemente obtener el Set de Hibernate, y luego ordenarlo yo mismo en código? Parece innecesario cuando ya lo tenemos ordenado por el DB.


Me di cuenta de que el uso de una List no es la forma correcta de almacenar una colección de artículos ordenados naturalmente.

La solución es usar un SortedSet (como un TreeSet ) con un Comparator .