使用HQL查詢,每一個表都有映射文件配置,反向工程生成的映射文件裏對於多字符的char會自動映射到java中的string類型。這樣就不存在字段映射的問題了,可是這樣不能使用SQL; java
this.getSession().createSQLQuery("select id,name,state from tb") .addScalar("id", Hibernate.STRING) .addScalar("name", Hibernate.STRING) .addScalar("state", Hibernate.STRING ).list();
這樣就能夠解決,可是這樣的話,必須把全部要查詢的字段進行定義,在字段比較多的時候,就相對比較麻煩; git
這種解決方法比較方便,只須要在查詢語句指定char的返回類型,推薦使用這種方法進行查詢。
數據庫
首先建一個類,繼承com.digitwater.fwk.hibernate.Oracle9iDialect,該類的內容以下: oracle
public class MySQLDialect extends MySQL5Dialect { public MySQLDialect() { super(); registerHibernateType(Types.CHAR, Hibernate.STRING.getName()); } }
第二步,就是修改hibernate的配置文件hibernate.cfg.xml: 函數
將:<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> this
改成:<prop key="hibernate.dialect">com.fy.mgr.support.MySQLDialect</prop> spa
query.setResultTransformer(new AliasToBeanResultTransformer(StudentDTO.class)).list()
這種方法要求數據庫的字段名和類的屬性的大小寫必須一致,可是Oracle查詢返回的字段名卻全是大寫。 hibernate
2.使用addEntity方法,這種方法的缺點是SQL必須寫成select * from users的形式或select {a.*},{b.*} from a,b where...的格式cast 是進行類型轉換的, 能夠針對各類Oracle數據類型. 修改的是用戶的數據類型. code
round只是修改的數據顯示格式. 對數據作四捨五入. 相似的函數還有ceil(取此數據的最小整數). trunc( 取整函數.) orm
SQL> create table t1(a varchar(10));
Table created.
SQL> insert into t1 values ('12.3456');
1 row created.
SQL> select round(a) from t1;
ROUND(A)
----------
12
SQL> select round(a,3) from t1;
ROUND(A,3)
----------
12.346
SQL> select cast(a as int) from t1;
CAST(AASINT)
------------
12
SQL> select cast(a as number(8,4)) from t1;
CAST(AASNUMBER(8,4)) -------------------- 12.3456