addScalar做什么?

JavaDoc说:

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除了它在命名列上工作,并且可以返回复合结果。

为了避免使用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 

这将返回Object数组,但现在它不会使用ResultSetMetadata,而是显式地将ID,NAME和BIRTHDATE列分别从底层结果集中获取Long,String和Short。 这也意味着只返回这三列,即使查询使用*并且可以返回多于列出的三列。

可以省略所有或部分标量的类型信息。

 session.createSQLQuery("SELECT * FROM CATS") .addScalar("ID", Hibernate.LONG) .addScalar("NAME") .addScalar("BIRTHDATE") 

这与以前的查询基本相同,但现在ResultSetMetaData用于确定NAME和BIRTHDATE的类型,其中明确指定了ID的类型。

从此复制而来。

addScalar是SQL查询中给定键的returnType信息。

例:

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

如果查询结果,则结果将为String或其他类型(如果指定)。