addScalar 是做什么的?

新手上路,请多包涵

JavaDoc 说:

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

Declare a scalar query result

我知道 executeScalar 在 C# 中是什么,但是这个标量和 C# 标量似乎完全不同。

原文由 superM 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 733
2 个回答

这声明您希望查询结果返回单个命名列的对象,而不是实体。例如

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

将返回一个 Long 。如果您指定多个标量,则结果将以 Object 的数组形式返回。它类似于 executeScalar 除了它适用于命名列,并且可以返回复合结果。

原文由 Zutty 发布,翻译遵循 CC BY-SA 3.0 许可协议

为了避免使用 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 的类型。

从此 复制。

原文由 Evan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题