Подтвердить что ты не робот

Что делает addScalar?

В JavaDoc говорится:

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

Declare a scalar query result

Я знаю, что executeScalar находится в С#, но этот скаляр и скаляр С# кажутся совершенно разными.

4b9b3361

Ответ 1

Это объявление, что вы хотите, чтобы результат запроса возвращал объекты для отдельных столбцов, а не сущностей. Например,

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

Вернет один Long. Если вы укажете несколько скаляров, результат вернется как массив Object. Он похож на executeScalar, за исключением того, что он работает с именованными столбцами и может возвращать составной результат.

Ответ 2

Чтобы избежать накладных расходов на использование 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, где, когда тип идентификатора явно указан.

скопирован из этого.

Ответ 3

addScalar - это информация о возвращаемом типе для заданного ключа в запросе SQL.

Пример:

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

Если вы запрашиваете результат, результатом будет String или другие типы, если вы укажете.