addScalar做什么?

问题描述 投票:27回答:4

JavaDoc说:

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

Declare a scalar query result

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

java sql hibernate scalar
4个回答
31
投票

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

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

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


15
投票

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

this复制。


4
投票

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

例:

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

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


0
投票

当您的bean具有多个具有不同类型的字段并且您希望从mysql获取相同类型的这些字段时,可以使用此方法。例如。

public class Example { Long id; String name; }

您可以使用添加标量,如下所示

session.createSQLQuery("SELECT * FROM tableName")
.addScalar("id", Hibernate.LONG)
.addScalar("name", Hibernate.STRING);
© www.soinside.com 2019 - 2024. All rights reserved.