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.
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.
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 .
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.
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);