如何在使用本机SQL查询时指定数据类型?

时间:2012-10-12 13:39:55

标签: java spring hibernate

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

sqlQuery.addScalar("NAME", STRING);

我正在查询5列,ID是其中一列。但是,如果我使用addScalar,则不返回所有列,只返回NAME。我在表中指定列类型NAME列的原因是CHAR(10),但我希望String类型。如何指定数据类型并获取所有列?

2 个答案:

答案 0 :(得分:6)

为了避免使用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()方法及其列名和数据类型。

答案 1 :(得分:0)

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

如果没有问题,请同时添加剩余四列的类型。

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

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