該類需要繼承與我們使用的數據庫相應的方言類。比如:如果我們用的是MySql(版本為5.x.x),我們需要繼承“org.hibernate.dialect.MySQL5Dialect”;如果我們使用的是DB2,那麼我們應該繼承“org.hibernate.dialect.DB2Dialect”;我用的是Oracle10g,所以我要繼承“org.hibernate.dialect.Oracle10gDialect”
oracle10g中的會自動丟失時分秒,是ojdbc驅動問題,所以我們要自定義方言或者升級驅動
Oracle默認在hibernate映射是java.sql.Date類型時,,可以為這列配置java.sql.Timestamp
[java]
public class RegisterType extends Oracle10gDialect {
public RegisterType() {
// TODO Auto-generated constructor stub
super();
registerHibernateType(Types.CHAR, Hibernate.STRING.getName());//將數據庫的char類型轉為String類型
//registerHibernateType(Types.DATE, Hibernate.TIMESTAMP.getName());
//registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());
registerHibernateType(-1, Hibernate.STRING.getName());
}
}
你的Oracle用瞭decimal類型,報錯應該是 No Dialect mapping for JDBC type: 3 . 註意這個3, 它說明hibernate不能將這種數據類型映射到你的java類中. 就需要在自定義的方言中用到:
registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());
將你的方言註冊到hibernate.cfg.xml中
[java]
<prop key="hibernate.dialect">org.zjf.util.RegisterType</prop>