В JavaDoc говорится:
SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)
Declare a scalar query result
Я знаю, что executeScalar
находится в С#, но этот скаляр и скаляр С# кажутся совершенно разными.
В JavaDoc говорится:
SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)
Declare a scalar query result
Я знаю, что executeScalar
находится в С#, но этот скаляр и скаляр С# кажутся совершенно разными.
Это объявление, что вы хотите, чтобы результат запроса возвращал объекты для отдельных столбцов, а не сущностей. Например,
createSQLQuery("SELECT COUNT(*) AS c FROM Users").addScalar("c").uniqueResult()
Вернет один Long
. Если вы укажете несколько скаляров, результат вернется как массив Object
. Он похож на executeScalar
, за исключением того, что он работает с именованными столбцами и может возвращать составной результат.
Чтобы избежать накладных расходов на использование ResultSetMetadata или просто быть более явным в том, что возвращается, можно использовать addScalar():
session.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME", Hibernate.STRING)
.addScalar("BIRTHDATE", Hibernate.DATE)
Указанный запрос:
the SQL query string
the columns and types to return
Это вернет массивы объектов, но теперь он не будет использовать ResultSetMetadata, но вместо этого явно получит столбец ID, NAME и BIRTHDATE, соответственно, Long, String и Short из базового набора результатов. Это также означает, что будут возвращены только эти три столбца, хотя запрос использует * и может возвращать больше трех столбцов.
Можно оставить информацию о типе для всех или некоторых скаляров.
session.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME")
.addScalar("BIRTHDATE")
Это по сути тот же запрос, что и раньше, но теперь ResultSetMetaData используется для определения типа NAME и BIRTHDATE, где, когда тип идентификатора явно указан.
скопирован из этого.
addScalar
- это информация о возвращаемом типе для заданного ключа в запросе SQL.
Пример:
Query a = new SqlQuery("Select username as un from users where ...");
a.addScalar("un", String);
Если вы запрашиваете результат, результатом будет String или другие типы, если вы укажете.