1. 程式人生 > >自定義Hibernate Dialect解決createSQLQuery時的decimal,long

自定義Hibernate Dialect解決createSQLQuery時的decimal,long


org.hibernate.MappingException: No Dialect mapping for JDBC type: 3

仔細檢視,發現問題在於資料型別.到網上查,發現hibernate在執行List result = session.createSQLQuery(sql).list()的時候,當SQL語句中遇到的decimal,long等型別的欄位時,就出現上面的錯誤.而且從錯誤資訊中可以發現:出錯的是Dialect.

解決辦法:

錯誤知道以後,我就到網上找解決辦法.看來遇到這類問題的人太多了,網上到處都有人貼這個問題.我看了幾篇,發現有個解決辦法,就是自定義Hibernate Dialect.雖然所用資料庫不同(我用的資料庫是DB2),我覺得大同小異,就照著做了:

首先建一個類,繼承org.hibernate.dialect.DB2Dialect,該類的內容如下:


import java.sql.Types;

import org.hibernate.Hibernate;
import org.hibernate.dialect.DB2Dialect;

public class PmDb2Dialect extends DB2Dialect {
public PmDb2Dialect() {
super();
registerHibernateTyp(Types.DECIMAL,Hibernate.BIG_DECIMAL.getName());
}
}

第二步,就是修改hibernate的配置檔案hibernate.cfg.xml:

將:

<property name="hibernate.dialect">
org.hibernate.dialect.DB2Dialect
</property>

改為:

<property name="hibernate.dialect">
com.yonder.pm.common.PmDb2Dialect
</property>