問題
在Hibernate中如果通過
session.createSQLQuery("select '合計(jì)' as name from dual").list()
session.createSQLQuery("select '合計(jì)' name from dual").list()
查詢,返回值中只會(huì)有一個(gè)“合”字夷陋。
經(jīng)查沃饶,常量在數(shù)據(jù)庫(kù)中被認(rèn)為是CHAR類型的,Hibernate取值時(shí)將其保存為Character類型斑举,而Character只能保存一個(gè)字符,所以造成返回值中只存在一個(gè)字符病涨。
解決方法
該bug中給出2中解決方法:
1.繼承一個(gè)Dialect富玷,并注冊(cè)CHAR類型的對(duì)應(yīng)方式。代碼如下:
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.設(shè)置字段對(duì)應(yīng)的類型
(缺點(diǎn)是如果查詢很多字段既穆,每個(gè)字段都必須設(shè)置赎懦,沒設(shè)置類型的字段在結(jié)果集中是不存在的),代碼如下:
session.createSQLQuery("select '合計(jì)' as name from dual").addScalar("name", Hibernate.STRING).list()
3.在SQL中設(shè)置該字段的類型幻工,代碼如下
session.createSQLQuery("select cast('合計(jì)' as varchar(4)) as name from dual").list()