6

我正在使用休眠。我已经编写了本机 SQL 查询,我想指定其中一列的数据类型,如下所示。

sqlQuery.addScalar("NAME", STRING);

我正在查询 5 列,并且ID是其中的一列。但如果我使用addScalar它,它不会返回所有列并且只返回NAME。我指定列类型的原因是NAMEcolumn is of CHAR(10)in table 但我想要String类型。如何指定数据类型并获取所有列?

4

2 回答 2

7

为了避免使用 ResultSetMetadata 的开销,或者只是为了更明确地返回返回的内容,可以使用 addScalar():

sess.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。这也意味着只有这三列将被返回,即使查询使用 * 并且可能返回多于列出的三列。

参考:http ://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#d0e13646

因此,在您的情况下,再添加 4 个addScalar()方法,包括其列名和数据类型。

于 2012-10-12T13:46:33.443 回答
0

这是正常工作的。它可以使用ResultSetMetaData并返回查询返回的所有值,也可以使用提供的类型输入并返回随类型提供的列。

如果没有问题,也为剩余的四列添加类型。

     sqlQuery.addScalar("NAME", STRING).
     .addScalar("ID", Hibernate.LONG)
     .addScalar("COLUMN3", STRING)
     .addScalar("COLUMN4", STRING)
     .addScalar("COLUMN5", STRING);

根据您的实际列名及其数据类型更新列名和数据类型。

于 2012-10-12T13:51:20.190 回答