参考:
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();
}
相关推荐
<prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2012Dialect <prop key="hibernate.show_sql">true <value>com/yourpackage/YourEntity.hbm.xml</value> ``` 接下来,我们需要创建...
5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...
- **Driver Name**: 自定义名称,例如`sqlserver2000Driver`。 - **Connection URL**: 数据库的连接字符串,例如`jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ddsql`。 - **Username**: 数据库...
<property name="hibernate.connection.url">jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Tb_soft <property name="hibernate.connection.username">sa <property name="hibernate.connection.password">...
2. **多数据库支持**:为了适应不同的数据库,如MySQL、Oracle、SQL Server等,需要使用Hibernate的`Dialect`机制,动态选择合适的数据库方言。通过自定义`Dialect`类,可以实现特定数据库的特性,如存储过程、函数...
5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...
5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...
在这个配置文件中,`dialect`属性指定了数据库的方言,以便Hibernate能正确处理SQL语句。`connection.datasource`则指定了数据源,用于连接数据库。 总的来说,选择合适的主键生成策略和正确配置是Hibernate成功...
dialect = org.hibernate.dialect.SQLServer2008Dialect ``` 4. **Grails命令行工具** Grails提供了一系列的命令行工具,如`generate-all`用于生成模型、控制器和视图的初始代码,`run-app`启动应用,`test-app`...
5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...
系统兼容MySQL、Oracle和SQL Server数据库,通过Hibernate的Dialect机制,可以轻松移植到其他数据库系统。同时,系统利用Google Guava Collections库,以提升性能,优于Apache Collections。对于中文编码问题,系统...
同时,系统支持MySQL、Oracle和SQL Server等多种数据库,通过Hibernate的Dialect机制实现了数据库的平滑迁移。 在代码结构上,系统采用了分层设计,包括BaseParameter、ExtJSBaseController、BaseService和BaseDao...
3. **可扩展性**:Hibernate允许开发者自定义数据类型、转换器和查询策略,这意味着它可以适应各种复杂的数据模型和业务需求。 4. **可重用性**:Hibernate的组件和模块可以被多个项目共享,减少了重复劳动,提高了...
5. 数据库是 MySQL、Oracle 和 SQL Server,Hibernate 的 Dialect 可使程序移植到其他数据库。 6. 采用开源的互动地图 Javascript 库 Leaflet,处理自定义在线地图。 7. 采用 Google Guava Collections,性能高于 ...
<property name="dialect">org.hibernate.dialect.SQLServerDialect <property name="connection.url">jdbc:sqlserver://localhost:1433 <property name="connection.username">sa ...
5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google Guava Collections,性能高于Apache ...
通常的做法是在查询语句中加入`LIMIT`子句(MySQL等数据库),或者使用特定的方言(Dialect)来适配不同的数据库(如SQL Server、Oracle等)。 #### Hibernate分页查询 在Hibernate中,可以通过`Query`对象的`...
4. 数据库支持:支持MySQL、Oracle和SQL Server,通过Hibernate的Dialect配置,轻松实现跨数据库移植。 四、代码结构与设计 1. 基础模块封装:BaseParameter、ExtJSBaseController、BaseService、BaseDao分别封装...