web-dev-qa-db-fra.com

Que fait addScalar?

Le JavaDoc dit:

SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)

Declare a scalar query result

Je sais ce que executeScalar est en C #, mais ce scalaire et C # scalaire semblent être absolument différents.

29
superM

Cela signifie que vous souhaitez que le résultat de la requête renvoie des objets pour des colonnes nommées individuelles, plutôt que des entités. Par exemple

createSQLQuery("SELECT COUNT(*) AS c FROM Users").addScalar("c").uniqueResult()

Renvoie un seul Long. Si vous spécifiez plusieurs scalaires, le résultat reviendra sous la forme d'un tableau de Object. Son semblable à executeScalar sauf qu'il fonctionne sur les colonnes nommées et peut renvoyer un résultat composite.

32
Zutty

Pour éviter la surcharge d'utilisation de ResultSetMetadata, ou simplement pour être plus explicite dans ce qui est retourné, on peut utiliser addScalar ():

session.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME", Hibernate.STRING)
.addScalar("BIRTHDATE", Hibernate.DATE)

Cette requête a spécifié:

the SQL query string
the columns and types to return

Cela retournera des tableaux d'objets, mais maintenant il n'utilisera pas ResultSetMetadata mais obtiendra à la place explicitement les colonnes ID, NAME et BIRTHDATE comme respectivement Long, String et Short de l'ensemble de résultats sous-jacent. Cela signifie également que seules ces trois colonnes seront renvoyées, même si la requête utilise * et pourrait renvoyer plus que les trois colonnes répertoriées.

Il est possible de supprimer les informations de type pour tout ou partie des scalaires.

session.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME")
.addScalar("BIRTHDATE")

Il s'agit essentiellement de la même requête qu'auparavant, mais maintenant ResultSetMetaData est utilisé pour déterminer le type de NAME et BIRTHDATE, alors que le type d'ID est explicitement spécifié.

copié de this .

15
Evan

addScalar est une information de returnType pour une clé donnée dans une requête SQL.

Exemple:

Query a = new SqlQuery("Select username as un from users where ...");
a.addScalar("un", String);

Si vous recherchez un résultat, le résultat sera String ou d'autres types si vous spécifiez.

4
Grigor Nazaryan

Ceci est utilisé lorsque votre bean a plusieurs champs avec des types diff et que vous souhaitez obtenir ces champs dans le même type depuis mysql. par exemple.

public class Example { Long id; String name; }

vous pouvez utiliser ajouter un scalaire comme suit

session.createSQLQuery("SELECT * FROM tableName")
.addScalar("id", Hibernate.LONG)
.addScalar("name", Hibernate.STRING);
0
Pravin J.