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...的格式。
相關文章
- 查詢字串中第一個非重複字元的3種方法字串字元
- Mybatis Plus 通過QueryWrapper做查詢時in()方法的使用MyBatisAPP
- 391、Java框架46 -【Hibernate - 查詢HQL、查詢Criteria、查詢標準SQL】 2020.10.19Java框架SQL
- SQL Server查詢慢的解決方案SQLServer
- Hibernate 查詢
- Python中查詢字串某個字元最常用的方法!Python字串字元
- Hibernate中不支援複雜子查詢from (select ……)解決方案
- hibernate中hql查詢
- hibernate查詢的方式 都有哪些
- hibernate的三種查詢方式
- sql一關聯多查詢時否定篩選出現的問題的解決SQL
- Hibernate-ORM:13.Hibernate中的連線查詢ORM
- Hibernate查詢自動更新
- SQL查詢是否”存在”的新方法SQL
- SQL查詢的:子查詢和多表查詢SQL
- Excel 2010 SQL應用032 字元範圍的模糊匹配查詢ExcelSQL字元
- 幾個SQL查詢小技巧SQL
- pandas 的幾個查詢方法
- Python字串刪除第一個字元常用的方法!Python字串字元
- indexedDB 通過索引查詢資料Index索引
- 通過Web API查詢資料WebAPI
- 分享一個查詢某個使用者過去一段時間內執行的SQL語句。SQL
- mongodb密碼特殊字元的解決方法MongoDB密碼字元
- 如何使用Hibernate/JPA的JPQL/HQL查詢提取?
- mybatis註解Select查詢List,返回有物件個數,但是為nullMyBatis物件Null
- SQL 兩個表組合查詢SQL
- Hibernate【查詢、連線池、逆向工程】
- Android SQL資料庫查詢方法 query( )AndroidSQL資料庫
- SQL Server 語句日期格式查詢方法SQLServer
- 通過java反射,遞迴查詢物件所有屬性,為空也要返回欄位的結構Java反射遞迴物件
- 介面返回[object,Object]解決方法Object
- SQL Server 查詢超時問題排查SQLServer
- mybatis 對特殊字元的模糊查詢MyBatis字元
- 教你快速從SQL過度到Elasticsearch的DSL查詢SQLElasticsearch
- 如何跑通第一個 SQL 作業SQL
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- Spark SQL 教程: 通過示例瞭解 Spark SQLSparkSQL
- 字元流中第一個不重複的字元字元
- 記一個實用的sql查詢語句SQL