addScalar 有什么作用?
JavaDoc 说:
SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)
Declare a scalar query result
我知道C#中有什么,但是这个标量和C#标量似乎完全不同。executeScalar
JavaDoc 说:
SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)
Declare a scalar query result
我知道C#中有什么,但是这个标量和C#标量似乎完全不同。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
这将返回 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 的类型是显式指定的。
从此处复制。