1. 程式人生 > >Hibernate執行原生sql時,將資料庫的char(n)型別轉換成了character型別的解決方案

Hibernate執行原生sql時,將資料庫的char(n)型別轉換成了character型別的解決方案

在使用Hibernate的原生態SQL對Oracle進行查詢時,碰到查詢char型別的時候始終返回的是一個字元,開始認為應該是Hibernate在做對映的把資料型別給對映成char(1),在經過查詢網上的一些資料,得知產生這個問題的主要原因確實是Hibernate再查詢Oracle的時候,將char自動對映成character(varchar的子集)型別,現有以下幾種解決方法:

1:將你要查詢的實體轉換成實體Bean,使用HQL查詢,這樣就不存在欄位對映的問題了,但是這樣比較麻煩;

2:可以使用Hibernate中的addScalar(String arg,Type type)來自定義返回欄位的型別,如:

this.getSession()
		.createSQLQuery("select id,name,state from tb")
		.addScalar("id", Hibernate.STRING)
		.addScalar("name", Hibernate.STRING)
		.addScalar("state", Hibernate.STRING)
		.list();

 這樣就可以解決,但是這樣的話,必須把所有要查詢的欄位進行定義,在欄位比較多的時候,就相對比較麻煩;

3:在Oracle查詢語句中直接指定資料格式,如:

select id,name,cast(state as varchar(2)) from tb

 這種解決方法比較方便,只需要在查詢語句指定char的返回型別,推薦使用這種方法進行查詢。