我正在使用hibernate。我已經編寫了原生SQL查詢,並且想要指定其中一列的數據類型如下。如何在使用原生SQL查詢時指定數據類型?
sqlQuery.addScalar("NAME", STRING);
我在查詢5欄,ID
是其中的一欄。但是如果我使用addScalar
,它不會返回所有列,並且僅返回NAME
。我指定列類型的原因是NAME
列中的列表是CHAR(10)
,但我想要String
類型。我如何指定數據類型並獲取所有列?
我正在使用hibernate。我已經編寫了原生SQL查詢,並且想要指定其中一列的數據類型如下。如何在使用原生SQL查詢時指定數據類型?
sqlQuery.addScalar("NAME", STRING);
我在查詢5欄,ID
是其中的一欄。但是如果我使用addScalar
,它不會返回所有列,並且僅返回NAME
。我指定列類型的原因是NAME
列中的列表是CHAR(10)
,但我想要String
類型。我如何指定數據類型並獲取所有列?
爲了避免使用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()
方法,其列名稱和數據類型。
這是工作,因爲它應該工作。它可以使用ResultSetMetaData
並返回查詢返回的所有值,也可以使用提供的類型輸入並返回隨類型提供的列。
如果沒有問題,請爲其餘四列添加類型。
sqlQuery.addScalar("NAME", STRING).
.addScalar("ID", Hibernate.LONG)
.addScalar("COLUMN3", STRING)
.addScalar("COLUMN4", STRING)
.addScalar("COLUMN5", STRING);
根據您的實際列名及其數據類型更新列名和數據類型。
我不想添加更多的addScalar(),並仍然想要獲取原始數據類型中的所有列。這怎麼可能? – Shivam