在使用Hibernate的原生態SQL對Oracle進行查詢時,碰到查詢char類型的時候始終返回的是一個字符,開始認爲應該是Hibernate在作映射的把數據類型給映射成char(1),在通過查找網上的一些資料,得知產生這個問題的主要緣由確實是Hibernate再查詢Oracle的時候,將char自動映射成character(varchar的子集)類型,現有如下幾種解決方法:java
1:將你要查詢的實體轉換成實體Bean,使用HQL查詢,這樣就不存在字段映射的問題了,可是這樣比較麻煩;sql
2:能夠使用Hibernate中的addScalar(String arg,Type type)來自定義返回字段的類型,如:this
this.getSession() .createSQLQuery("select id,name,state from tb") .addScalar("id", Hibernate.STRING) .addScalar("name", Hibernate.STRING) .addScalar("state", Hibernate.STRING) .list();
這樣就能夠解決,可是這樣的話,必須把全部要查詢的字段進行定義,在字段比較多的時候,就相對比較麻煩;code
3:在Oracle查詢語句中直接指定數據格式,如:get
select id,name,cast(state as varchar(2)) from tb
這種解決方法比較方便,只須要在查詢語句指定char的返回類型,推薦使用這種方法進行查詢。io