Hibernate HQL Query: Zusatzspalten in Selektion ?!

Hallo!

Ich möchte eine spezielle Anfrage in HQL über session.createQuery() erzeugen. Folgendes einfaches Beispiel funktioniert wunderbar:

select t from myTable as t

nun brauche ich aber auch errechnete Ergebnisse, etwa sowas:

select t, t.x + 10 as result from myTable as t

Grundsätzlich schluckt Hibernate das, allerdings gibt es jetzt natürlich ein Problem mit dem Rückgabetypus des Queries. Er ist nicht mehr myTable, da ja eine Spalte hinzugekommen ist. Wie komme ich an die Ergebnisse ran?

Hallo,

die Hibernate-Doku (http://www.hibernate.org/hib_docs/v3/reference/en/ht…) liefert die Antwort:

Iterator results = sess.createQuery(
 "select t, t.x + 10 as result from myTable as t")
 .list()
 .iterator();

while ( results.hasNext() ) {
 Object[] row = (Object[]) results.next();
 MyTable myTable = (MyTable) row[0];
 Integer xPlus10 = (Integer) row[1];
}

So oder so ähnlich eben. Aber wie Du siehst, ist das recht unschöner Code, da Du mit Casting arbeiten mußt. Warum läßt Du Dir nicht einfach die gewünschte MyTable zurückgeben und berechnest dann manuell den um 10 erhöhten Wert?

Vielen Dank für Deine Antwort, ich werd es gleich mal ausprobieren. Mein Beispiel ist nur extrem vereinfacht. Die Berechnung, die ich machen möchte geht über viele Datensätze und ist aufwändig genug, dass sie gleich von der Datenbank miterledigt werden soll.