Java文档说:
SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)
Declare a scalar query result
我知道C#中的executeScalar
是什么,但是这个标量和C#标量似乎完全不同。
该声明表明您希望查询结果返回单独命名列的对象,而不是实体。例如:
createSQLQuery("SELECT COUNT(*) AS c FROM Users").addScalar("c").uniqueResult()
将返回一个单独的 Long
。如果您指定多个标量,结果将作为 Object
数组返回。它类似于 executeScalar
,不同之处在于它适用于命名列,并且可以返回复合结果。
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
session.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME")
.addScalar("BIRTHDATE")
addScalar
是SQL查询中给定键的返回类型信息。
例如:
Query a = new SqlQuery("Select username as un from users where ...");
a.addScalar("un", String);
当你的bean有多个字段,类型不同,并且你想从mysql中以相同的类型获取这些字段时使用它。
例如:public class Example { Long id; String name; }
session.createSQLQuery("SELECT * FROM tableName")
.addScalar("id", Hibernate.LONG)
.addScalar("name", Hibernate.STRING);
LongType.INSTANCE
而不是Hibernate.LONG
。 - der Michi*
?我的问题是,在我的PostgreSQL中,字段的数据类型是bigserial
,在我的Java代码中转换为BigInteger
。但是我的POJO类将这些字段设置为Long,因此我使用addScalar(...)
指定了这些Long
字段的类型,但现在我的查询仅返回这些有限的字段。我找不到出路。有什么想法吗? - mantri