web-dev-qa-db-de.com

Was macht addScalar?

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.

29
superM

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.

32
Zutty

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 .

15
Evan

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.

4
Grigor Nazaryan

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);
0
Pravin J.