Hibernate 註冊自定義類型 – JAVA編程語言程序開發技術文章

該類需要繼承與我們使用的數據庫相應的方言類。比如:如果我們用的是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> 

發佈留言