hibernate 查詢常量只返回第乙個字元

2021-09-01 11:23:31 字數 1178 閱讀 2105

在hibernate中如果通過

session.createsqlquery("select '合計' as name from dual").list()

查詢,返回值中只會有乙個「合」字。

經查,常量在資料庫中被認為是char型別的,hibernate取值時將其儲存為character型別,而character只能儲存乙個字元,所以造成返回值中只存在乙個字元。hibernate官方已存在此bug

,卻從未修復。

該bug中給出2中解決方法:

1.繼承乙個dialect,並註冊char型別的對應方式。**如下

public class mysqlserverdialect extends org.hibernate.dialect.sqlserverdialect

}

2.設定字段對應的型別(缺點是如果查詢很多字段,每個欄位都必須設定,沒設定型別的字段在結果集中是不存在的),**如下

session.createsqlquery("select '合計' as name from dual").addscalar("name", hibernate.string).list()

還有一種解決方法是在sql中設定該字段的型別,**如下

session.createsqlquery("select cast('合計' as varchar(4)) as name from dual").list()

該方法在oracle和sql server中可用。

hibernate中將sql查詢出來字段轉換為物件的方法有兩種

1.使用resulttransformer,**如下

query.setresulttransformer(new aliastobeanresulttransformer(studentdto.class)).list()

這種方法要求資料庫的欄位名和類的屬性的大小寫必須一致,但是oracle查詢返回的欄位名卻全是大寫。

2.使用addentity方法,這種方法的缺點是sql必須寫成select * from users的形式或select , from a,b where...的格式。

**:

Hibernate 查詢方式

hibernate共有三種查詢方式 hql qbc和sql hql寫起來靈活直觀,而且與所熟悉的sql的語法類似。條件查詢 分頁查詢 連線查詢 巢狀查詢,包括一些查詢函式 count sum 等 查詢條件的設定等寫起來與sql語法一致,主要區別就是把表名換成了類或者物件。注意 在hql中關鍵字不區分...

Hibernate模糊查詢

hibernate模糊查詢 和sql查詢一樣,hibernate,hql使用like關鍵字進行模糊查詢。模糊查詢能夠比較字串是否與指定的字串模式匹配。其中使用萬用字元表示 如下 百分號 匹配任意型別 任意長度的字串,中文則需要兩個百分號 下劃線 匹配單個任意字元,一般用來限制字串表示式的長度。下面舉...

hibernate 投影查詢

1.投影查詢就是想查詢某一字段的值或者某幾個欄位的值 2.投影查詢的案例 如果查詢多個字段,例如下面這種方式 listlist session.createquery select c.cust name,c.cust level from customer c list for object ob...