Hibernate執行原生sql時,將資料庫的char(n)型別轉換成了character型別的解決方案
阿新 • • 發佈:2019-02-18
在使用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的返回型別,推薦使用這種方法進行查詢。