Ich habe eine Hibernate Java Entität namens X verwaltet und eine native SQL-Funktion (myfunc), die ich von einer Hibernate SQL-Abfrage in dieser Richtung nennen:Wie kann man die Ergebnisse einer SQL-Abfrage am besten einem Nicht-Entity-Java-Objekt mit Hibernate zuordnen?
SQLQuery q = hibernateSession.createSQLQuery(
"SELECT *, myfunc(:param) as result from X_table_name"
);
Was möchte ich tun, ist, das alles von zurück zur Karte Diese Abfrage an eine Klasse (nicht unbedingt von Hibernate verwaltet) namens Y. Y sollte alle Eigenschaften/Felder von X plus die result
von myfunc
, z Y könnte Klasse X erweitern und ein "Ergebnis" -Feld hinzufügen.
Was ich versucht habe:
- Ich habe versucht, mit
q.addEntity(Y.class)
aber irgendwie:org.hibernate.MappingException: Unknown entity com.mycompany.Y
q.setResultTransformer(Transformers.aliasToBean(Y.class));
aber irgendwie:org.hibernate.PropertyNotFoundException: Could not find setter for some_property
. X hat ein Feld namenssomeProperty
mit dem entsprechenden Getter und Setter, aber in diesem Fall scheint es nicht so, als würde Hibernate den Spaltennamen (some_property) dem richtigen Feldnamen zuordnen.q.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
gibt eine Map zurück, aber die Werte sind nicht immer vom Typ, der vom entsprechenden Feld in X erwartet wird. Zum Beispiel können Felder in X vom Typ enum und Date nicht direkt von der von der SQL-Abfrage zurückgegebenen Map zugeordnet werden Saiten).
Was ist der richtige Weg, um mit dieser Situation umzugehen?
Eek, eine Besetzung zu 'Long'. Woher weißt du im Voraus, dass 'row [0]' ein 'Long' sein wird? Gibt es eine Möglichkeit, die Datentypkonvertierung über die Hibernate-APIs zu erzwingen? –
@LukasEder: Folgen Sie dem Link zur Dokumentation, dort wird erklärt. Aber die Verwendung von SQL-Abfragen mit Hibernate sollte extrem außergewöhnlich sein. In den meisten Fällen verwenden Sie HQL/Kriterien-Abfragen, und der Typ wird vom Typ des Feldes in Ihrer Entität abgeleitet. –
Danke für die Info. Ich hätte deine Antwort vollständig lesen sollen ...Nichtsdestotrotz ist es immer noch ein bisschen schmerzhaft, dass die Typinformation wiederholt werden muss. –