2012-10-12 20 views
3

我正在使用hibernate。我已經編寫了原生SQL查詢,並且想要指定其中一列的數據類型如下。如何在使用原生SQL查詢時指定數據類型?

sqlQuery.addScalar("NAME", STRING); 

我在查詢5欄,ID是其中的一欄。但是如果我使用addScalar,它不會返回所有列,並且僅返回NAME。我指定列類型的原因是NAME列中的列表是CHAR(10),但我想要String類型。我如何指定數據類型並獲取所有列?

回答

5

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

我不想添加更多的addScalar(),並仍然想要獲取原始數據類型中的所有列。這怎麼可能? – Shivam

0

這是工作,因爲它應該工作。它可以使用ResultSetMetaData並返回查詢返回的所有值,也可以使用提供的類型輸入並返回隨類型提供的列。

如果沒有問題,請爲其餘四列添加類型。

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

根據您的實際列名及其數據類型更新列名和數據類型。

相關問題