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

use*_*403 5 java spring hibernate

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

sqlQuery.addScalar("NAME", STRING);
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*ati 7

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

sess.createSQLQuery("SELECT * FROM CATS")
 .addScalar("ID", Hibernate.LONG)
 .addScalar("NAME", Hibernate.STRING)
 .addScalar("BIRTHDATE", Hibernate.DATE)
Run Code Online (Sandbox Code Playgroud)

此查询指定:

the SQL query string

the columns and types to return
Run Code Online (Sandbox Code Playgroud)

这将返回Object数组,但现在它将不使用ResultSetMetadata,而是显式地将ID,NAME和BIRTHDATE列分别从底层结果集中获取Long,String和Short.这也意味着只返回这三列,即使查询使用*并且可以返回超过列出的三列.

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

因此,在您的情况下,添加另外4个addScalar()方法,其列名和数据类型.

  • 我不想添加更多的addScalar()并且仍然想要获取原始数据类型中的所有列。这怎么可能? (2认同)