• Hibernate 自定义方言


     

    自定义一个方言类——Hibernate Dialect

    标签: hibernatesqlserverjdbcmysql数据库java
     分类:
     

    该类需要继承与我们使用的数据库相应的方言类。比如:如果我们用的是MySql(版本为5.x.x),我们需要继承“org.hibernate.dialect.MySQL5Dialect”;如果我们使用的是DB2,那么我们应该继承“org.hibernate.dialect.DB2Dialect”;我用的是SqlServer2008,所以我要继承“org.hibernate.dialect.SQLServerDialect”

    [java] view plaincopy
     
     
    1. import java.sql.Types;  
    2.   
    3. import org.hibernate.Hibernate;  
    4. import org.hibernate.dialect.MySQL5Dialect;  
    5. /** 
    6.  * 重写MySQL5Dialect类,注册Types 
    7.  
    8.  * @author lz 
    9.  * 
    10.  */  
    11. public class MyDialect extends MySQL5Dialect {  
    12.  public MyDialect(){  
    13.   super();  
    14.     
    15.   registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());  
    16.   registerHibernateType(Types.LONGVARCHAR,Hibernate.STRING.getName());  
    17.   registerHibernateType(Types.BINARY,Hibernate.STRING.getName());  
    18.   registerHibernateType(-1, Hibernate.STRING.getName());  
    19.  }  
    20. }  


    说明: 如果你的数据库是mysql,而又用了decimal类型,报错应该是 No Dialect mapping for JDBC type: 3 . 注意这个3, 它说明hibernate不能将这种数据类型映射到你的java类中. 就需要在自定义的方言中用到:说明:

    如果你的数据库是mysql,而又用了decimal类型,报错应该是 No Dialect mapping for JDBC type: 3 . 注意这个3, 它说明hibernate不能将这种数据类型映射到你的java类中. 就需要在自定义的方言中用到:

    registerHibernateType(Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());

    如果你用了text数据类型,hibernate根本就不认识这种数据类型,所以会返回No Dialect mapping for JDBC type: -1

    这样的话,就需要在方言中加入:

    registerHibernateType(-1,Hibernate.STRING.getName());

    [html] view plaincopy
     
     
    1. <property name="hibernate.dialect">    
    2. com.yourcompany.MyDialect  
    3. </property>   
  • 相关阅读:
    网络配置
    mysql和mongodb的区别
    HTTP和HTTPS
    网络架构/结构
    SKU和SPU表的设计
    第三方-FastDFS分布式文件系统
    并发和并行
    多任务-线程、进程、协程的一些见解
    多任务-协程
    多任务-协程之生成器
  • 原文地址:https://www.cnblogs.com/developer-ios/p/5351699.html
Copyright © 2020-2023  润新知