Hibernate - Sortieren bereits durch Mappingfile

webmagier

Mitglied
Ich weis wie man mit criteria Ergebnisse sortieren kann, aber kann man das schon per default im mapping festlegen?
Standartmäßig liefert Hibernate eine Liste die mit

databaseSession.find("select from beanClassName);

erzeugt wird immer nach den id's sortiert.
Wenn ich jetzt ein entity mit einer id (integer) und einer Spalte "name" habe, kann ich dann bereits im Mapping festlegen, dass ich das nicht nach id's sortiert, sonder nach Namen sortiert haben möchte?

Wie das funktieroniert, wenn meine bean eine Liste anderer entities enthält ist mir klar, da kann ich bei dem zugehörigem <set/> tag im mapping file einfach das order_by angeben, aber wie mache ich das bei dem entity selbst?

Mfg Daniel
 
Hallo!

Versuchs doch einfach mal mit dem "order-by" Attribut in deinem Mapping File für die jeweilige Entität.

Bsp:

Code:
...
order-by="ORDER_DATE DESC">
...

Es gibt bei Hibernate eben den unterschied zwischen "sorted" und "ordered". "sorted" wir auf "Hibernate-Level" durchgeführt und "ordered" auf Datenbanklevel.

Wenn du jedoch an der Entität das Sortierverhalten einstellen willst kannst du eine Klassenehmen die Comparable implementiert und dann in deinem Mapping das sort Attribut mit eben dieser Klasse (FQCN) belegen.

Code:
<map name="Foo"
...
table="Foo"
sort="com.abc.util.comparator.MyComparator">
...

HTH,

Gruß Tom
 
Die Frage ist nur, wo ich dieses order-by attribut angeben muss, denn in der Doku steht nix dazu und wenn ich mit eclipse das mappingfile editiere habe ich ja auch immer ne Liste mit möglichen attributen für das jeweilige tag, dass ich gerade bearbeite, aber da ist das order-by nicht dabei. Hier mal mein mapping file, dass zu einer Bean gehört, wo ich will, dass wenn ich mir von diesem Bean eine Liste zurückgeben lasse diese automatisch nach den namen des moduls und nicht nach dessen id sortiert ist.


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>
	<!-- reisebuero.model.ModuleBean root -->
	<class name="reisebuero.model.ModuleBean" table="modules">
		<id name="id" type="int" column="id">
			<generator class="native" />
		</id>
		<property name="name" column="name" type="string"/>
		<set name="roles" lazy="false" table="rights">
			<key column="module_id"/>
			<many-to-many class="reisebuero.model.RoleBean" column="role_id"/>
		</set>
 
		<set name="actions" lazy="false" table="actionregistries" order-by="action_id">
			<key column="module_id"/>
			<many-to-many class="reisebuero.model.ActionBean" column="action_id"/>
		</set>
	</class>
</hibernate-mapping>

Wie du siehst hat diese bean noch eine Collection mit ActionBean, und die kann ich auch sortieren lassen wie man in dem Mapping sieht....kein Problem, aber ich will schon das Modul selbst sortiert nach namen und nicht nach id haben, wenn ich mir gleich ne ganze Liste davon zurückgeben lasse.


Mfg Daniel Richter
 
Zurück