是什么addScalar办?(What does addScalar do?)

2019-07-21 12:25发布

JavaDoc中说:

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

Declare a scalar query result

我知道executeScalar是在C#中,但这种标和C#标似乎是完全不同的。

Answer 1:

这是宣布你想查询的结果返回的对象为个人命名的列,而不是实体。 例如

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

将返回一个Long 。 如果指定了多个标量,其结果会回来的数组Object 。 它类似executeScalar除了它适用于指定的列,并可以返回一个复合的结果。



Answer 2:

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

这将返回对象数组,但现在不再使用ResultSetMetdata,而是明确得到分别作为ID,姓名和出生日期列长,字符串和底层的ResultSet短。 这也意味着,只有这三列将被退回,即使查询使用*和可能获得超过三家上市列的更多。

这是可以省略的全部或部分的标量的类型信息。

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

这基本上是相同的查询和以前一样,但是现在使用ResultSetMetaData来确定NAME和出生日期,而ID的类型是明确指出的类型。

从复制此 。



Answer 3:

addScalar是返回类型的在SQL查询中给定的关键信息。

例:

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

如果查询结果,结果将是字符串或其它类型,如果你指定。



Answer 4:

当你的bean有差异类型的多个字段这是用来和你想在从MySQL同类型的这些字段。 例如。

public class Example { Long id; String name; }

您可以使用添加标如下

session.createSQLQuery("SELECT * FROM tableName")
.addScalar("id", Hibernate.LONG)
.addScalar("name", Hibernate.STRING);


文章来源: What does addScalar do?