Что делает addScalar?
JavaDoc говорит:
SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)
Declare a scalar query result
Я знаю executeScalar
находится в C#, но этот скаляр и скаляр C# кажутся абсолютно разными.
3 ответов
это объявление, что вы хотите, чтобы результат запроса возвращал объекты для отдельных именованных столбцов, а не сущности. Например,
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 используется для определения типа имени и даты рождения, где в качестве типа ID явно указан.
скопировал из этой.
addScalar
- это информация returnType для данного ключа в SQL-запросе.
пример:
Query a = new SqlQuery("Select username as un from users where ...");
a.addScalar("un", String);
Если вы запросите результат, результатом будет строка или другие типы, если вы укажете.