`

Hibernate 自定义dialect(SQLServer)

 
阅读更多
   
参考:
1.http://dingren.blog.51cto.com/4586729/1093242
2.http://tech.ccidnet.com/art/3539/20070717/1146833_1.html
 
     hibernate 在查询一些大数据类型如:varchar(max)时,会报“ No Dialect mapping for JDBC type ”错误,此时需要自定义dialect
1.继承Dialect
其中SQLServerDialect是指SQLServer2000,SQLServer2008Dialect是指SQLServer2008,
SQLServer2005Dialect是指SQLServer2500,SQLServer2005Dialect继承SQLServerDialect,SQLServer2008Dialect继承SQLServer2005Dialect,在2005时,引入了ROW_NUMBER可用于分页,不然hibernate是假分页(先将top数据放到内存后,再截取)
public class MySQLServerDialect extends SQLServer2008Dialect {
 
     public MySQLServerDialect() {
           super();
          registerHibernateType( Types.NVARCHAR, Hibernate.STRING.getName());
          registerHibernateType( Types.DECIMAL, Hibernate.BIG_INTEGER.getName());
          registerHibernateType( Types.LONGVARBINARY, Hibernate.BLOB.getName());
          registerHibernateType( Types.REAL, Hibernate.FLOAT.getName());
          registerHibernateType( Types.DECIMAL, Hibernate.BIG_DECIMAL.getName());
          registerHibernateType( Types.LONGVARCHAR, Hibernate.TEXT.getName());
     }
}
registerHibernateType函数用来注册类型
2.在配置hibernate属性时加入
 <property name="hibernate.dialect" value="xxx.xxx.MySQLServerDialect"/>  
3.分页调整
@Override
      public String getLimitString(String query, int offset, int limit) {
           // StringBuilder(querySqlString.trim().toLowerCase());
          StringBuilder sb = new StringBuilder(query.trim());//取消小写化
           int orderByIndex = sb.indexOf("order by" );
          CharSequence orderby = ((CharSequence) (orderByIndex <= 0 ? "ORDER BY CURRENT_TIMESTAMP"
                   : sb.subSequence(orderByIndex, sb.length())));
           if (orderByIndex > 0)
              sb.delete(orderByIndex, orderByIndex + orderby.length());
//        replaceDistinctWithGroupBy(sb);
           insertRowNumberFunction(sb, orderby);
          sb.insert(0, "WITH query AS (" ).append(") SELECT * FROM query ");
          sb.append( "WHERE __hibernate_row_nr__ >= ? AND __hibernate_row_nr__ < ?");
           return sb.toString();
     }
分享到:
评论

相关推荐

    Spring集成Hibernate写SQLServer

    &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.SQLServer2012Dialect &lt;prop key="hibernate.show_sql"&gt;true &lt;value&gt;com/yourpackage/YourEntity.hbm.xml&lt;/value&gt; ``` 接下来,我们需要创建...

    通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)

    5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...

    hibernate登录小例子

    - **Driver Name**: 自定义名称,例如`sqlserver2000Driver`。 - **Connection URL**: 数据库的连接字符串,例如`jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ddsql`。 - **Username**: 数据库...

    完整Struts2 HIBERNATE实现分页

    &lt;property name="hibernate.connection.url"&gt;jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Tb_soft &lt;property name="hibernate.connection.username"&gt;sa &lt;property name="hibernate.connection.password"&gt;...

    hibernate动态数据库进化版

    2. **多数据库支持**:为了适应不同的数据库,如MySQL、Oracle、SQL Server等,需要使用Hibernate的`Dialect`机制,动态选择合适的数据库方言。通过自定义`Dialect`类,可以实现特定数据库的特性,如存储过程、函数...

    ExtJS 4.2+JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)

    5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)Eclipse版本

    5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...

    Hibernate主键类型说明和配置手册.doc

    在这个配置文件中,`dialect`属性指定了数据库的方言,以便Hibernate能正确处理SQL语句。`connection.datasource`则指定了数据源,用于连接数据库。 总的来说,选择合适的主键生成策略和正确配置是Hibernate成功...

    grails项目配置

    dialect = org.hibernate.dialect.SQLServer2008Dialect ``` 4. **Grails命令行工具** Grails提供了一系列的命令行工具,如`generate-all`用于生成模型、控制器和视图的初始代码,`run-app`启动应用,`test-app`...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)MyEclipse版本

    5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...

    通用后台管理系统(ExtJS 5.1 + Hibernate 4.1.7 + Spring MVC 3.2.8).pdf

    系统兼容MySQL、Oracle和SQL Server数据库,通过Hibernate的Dialect机制,可以轻松移植到其他数据库系统。同时,系统利用Google Guava Collections库,以提升性能,优于Apache Collections。对于中文编码问题,系统...

    通用后台管理系统(ExtJS 5.1 + Hibernate 4.1.7 + Spring MVC 3.2.8).docx

    同时,系统支持MySQL、Oracle和SQL Server等多种数据库,通过Hibernate的Dialect机制实现了数据库的平滑迁移。 在代码结构上,系统采用了分层设计,包括BaseParameter、ExtJSBaseController、BaseService和BaseDao...

    heibernate从入门到精通

    3. **可扩展性**:Hibernate允许开发者自定义数据类型、转换器和查询策略,这意味着它可以适应各种复杂的数据模型和业务需求。 4. **可重用性**:Hibernate的组件和模块可以被多个项目共享,减少了重复劳动,提高了...

    通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8).pdf

    5. 数据库是 MySQL、Oracle 和 SQL Server,Hibernate 的 Dialect 可使程序移植到其他数据库。 6. 采用开源的互动地图 Javascript 库 Leaflet,处理自定义在线地图。 7. 采用 Google Guava Collections,性能高于 ...

    extjs整合ssh框架

    &lt;property name="dialect"&gt;org.hibernate.dialect.SQLServerDialect &lt;property name="connection.url"&gt;jdbc:sqlserver://localhost:1433 &lt;property name="connection.username"&gt;sa ...

    Java通用后台管理系统源码 JAVATYHTXT.rar

    5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...

    Hibernate和Spring集成分页方法

    通常的做法是在查询语句中加入`LIMIT`子句(MySQL等数据库),或者使用特定的方言(Dialect)来适配不同的数据库(如SQL Server、Oracle等)。 #### Hibernate分页查询 在Hibernate中,可以通过`Query`对象的`...

    通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8).docx

    4. 数据库支持:支持MySQL、Oracle和SQL Server,通过Hibernate的Dialect配置,轻松实现跨数据库移植。 四、代码结构与设计 1. 基础模块封装:BaseParameter、ExtJSBaseController、BaseService、BaseDao分别封装...

Global site tag (gtag.js) - Google Analytics