Hibernate通過SQL查詢常量時只能返回第一個字元的解決方法
在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
{
public MySQLServerDialect()
{
super();
//very important, mapping char(n) to String
registerHibernateType(Types.CHAR, Hibernate.STRING.getName());
}
}
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 {a.*},{b.*} from a,b where...的格式。
相關文章
- 關於EJB查詢返回值的解決方法 (轉)
- 查詢字串中第一個非重複字元的3種方法字串字元
- js如何查詢字元處中第一個不重複的字元JS字元
- Mybatis Plus 通過QueryWrapper做查詢時in()方法的使用MyBatisAPP
- 通過SQL查詢UDUMP檔案SQL
- Hibernate綜合查詢解決方案 (轉)
- hibernate的native sql查詢SQL
- 通過shell和sql結合查詢效能sqlSQL
- SQL Server查詢慢的解決方案SQLServer
- php通過陣列存取mysql查詢語句的返回值PHP陣列MySql
- 解決Mysql中只能通過localhost登陸不能通過ip登陸的問題MySqllocalhost
- ORACLE 鎖表的解決方法及查詢引起鎖表SQL語句方法OracleSQL
- 談談SQL慢查詢的解決思路SQL
- jdbc 呼叫 sql server 的儲存過程時“該語句沒有返回結果集”的解決方法JDBCSQLServer儲存過程
- Python中查詢字串某個字元最常用的方法!Python字串字元
- Hibernate查詢後返回的集合物件中每個物件是什麼型別的?物件型別
- 通過spid,查詢執行慢的sql指令碼SQL指令碼
- 通過SQL查詢兩張表中不匹配的行SQL
- 通過shell指令碼生成查詢表資料的sql指令碼SQL
- hibernate(七) hibernate中查詢方式詳解
- SQL查詢優化的方法SQL優化
- Hibernate 查詢
- sql查詢過程表述SQL
- MySQL in 查詢,並通過 FIELD 函式按照查詢條件順序返回結果MySql函式
- ORACLE 鎖表的解決方法及查詢引起鎖表SQL語句[轉]OracleSQL
- SQL時間段查詢SQL
- Yii1.1中通過Sql查詢進行的分頁操作SQL
- 通過等待事件來獲得查詢SQl的執行計劃事件SQL
- SQL查詢的轉義方法(一)SQL
- exp 時遇到密碼有特殊字元(!@#)解決方法密碼字元
- sql一關聯多查詢時否定篩選出現的問題的解決SQL
- Hibernate查詢方式
- Hibernate——Query查詢
- 通過 sysprocesses 解決Sql死鎖問題SQL
- Hibernate 框架的查詢方式框架
- 通過外部表改進一個繁瑣的大查詢
- Oracle中的SQL分頁查詢原理和方法詳解OracleSQL
- php查詢mssql出現亂碼的解決方法PHPSQL