Das JavaDoc sagt:
SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)
Declare a scalar query result
Ich weiß, was executeScalar
in C # ist, aber dieser Skalar und dieser C # -Skalar scheinen sich absolut zu unterscheiden.
Hiermit wird festgelegt, dass das Ergebnis der Abfrage Objekte für einzelne benannte Spalten anstelle von Entitäten zurückgeben soll. Zum Beispiel
createSQLQuery("SELECT COUNT(*) AS c FROM Users").addScalar("c").uniqueResult()
Gibt ein einzelnes Long
zurück. Wenn Sie mehrere Skalare angeben, wird das Ergebnis als Array von Object
zurückgegeben. Es ähnelt executeScalar
mit der Ausnahme, dass es für benannte Spalten funktioniert und ein zusammengesetztes Ergebnis zurückgeben kann.
Um den Aufwand bei der Verwendung von ResultSetMetadata zu vermeiden oder einfach genauer zu beschreiben, was zurückgegeben wird, können Sie addScalar () verwenden:
session.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME", Hibernate.STRING)
.addScalar("BIRTHDATE", Hibernate.DATE)
Diese Abfrage spezifizierte:
the SQL query string
the columns and types to return
Dies gibt Object-Arrays zurück, verwendet aber jetzt nicht ResultSetMetadata, sondern ruft stattdessen explizit die Spalten ID, NAME und BIRTHDATE als Long, String und Short aus der zugrunde liegenden Ergebnismenge ab. Dies bedeutet auch, dass nur diese drei Spalten zurückgegeben werden, obwohl die Abfrage * verwendet und möglicherweise mehr als die drei aufgelisteten Spalten zurückgibt.
Es ist möglich, die Typinformationen für alle oder einige der Skalare wegzulassen.
session.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME")
.addScalar("BIRTHDATE")
Dies ist im Wesentlichen dieselbe Abfrage wie zuvor, aber jetzt wird ResultSetMetaData verwendet, um den Typ von NAME und BIRTHDATE zu bestimmen, wobei der ID-Typ explizit angegeben wird.
kopiert von this .
addScalar
ist eine Information von returnType für einen bestimmten Schlüssel in einer SQL-Abfrage.
Beispiel:
Query a = new SqlQuery("Select username as un from users where ...");
a.addScalar("un", String);
Wenn Sie nach dem Ergebnis fragen, ist das Ergebnis ein String oder ein anderer Typ, wenn Sie dies angeben.
Dies wird verwendet, wenn Ihre Bean mehrere Felder mit Diff-Typen hat und Sie diese Felder in demselben Typ von MySQL erhalten möchten. z.B.
public class Example { Long id; String name; }
sie können wie folgt Skalar hinzufügen verwenden
session.createSQLQuery("SELECT * FROM tableName")
.addScalar("id", Hibernate.LONG)
.addScalar("name", Hibernate.STRING);