达梦数据库使用记录,java hibernate框架项目连接达梦数据库,重写hibernate方言转换字段大小写
达梦数据库使用记录,java hibernate框架项目连接达梦数据库,重写hibernate方言转换字段大小写
·
版本说明
spring版本:4.3.7
hibernate版本:5.1.17 Final
达梦数据库版本:DM Database Server 64 V8
pom文件引入达梦数据库驱动
<!-- 达梦数据库驱动 -->
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.2.192</version>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmDialect-for-hibernate5.0</artifactId>
<version>8.1.2.192</version>
</dependency>
配置达梦数据库连接
cytjdb.driverClassName=dm.jdbc.driver.DmDriver
cytjdb.url=jdbc:dm://192.168.xx.xxx:5236?schema=BBP402CYTJDEV41
cytjdb.username=BBP402CYTJDEV41
cytjdb.password=xxxx
cytjdb.dialect=org.hibernate.dialect.DmDialect
程序之前用的oracle19C,之前语法有 select A as name的语法,在oralce下,统一返回大写NAME,但是转为达梦数据库后发现select A as name ,结果也返回小写的name了,需要改为select A as NAME ,才会返回大写,整个系统很多地方都是写的小写的字段名,这样改造工作量很大,下面记录下全局修改的方式
重写hibernate方言转换字段大小写(代码层面实现)
MyDmUpperCaseDialect.java
package org.hibernate.dialect;
import org.hibernate.type.StringType;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
/**
* @description: 自定义达梦方言:强制将 ResultSet 中的列别名转为大写
* @date: 2026/2/6
* @author: gaom
* @version: 1.0
*/
public class MyDmUpperCaseDialect extends DmDialect {
public MyDmUpperCaseDialect() {
super();
// 如果有特殊类型映射,可在此注册
registerHibernateType(Types.OTHER, StringType.INSTANCE.getName());
}
@Override
public ColumnAliasExtractor getColumnAliasExtractor() {
return UpperCaseColumnAliasExtractor.INSTANCE;
}
private static class UpperCaseColumnAliasExtractor implements ColumnAliasExtractor {
public static final UpperCaseColumnAliasExtractor INSTANCE = new UpperCaseColumnAliasExtractor();
@Override
public String extractColumnAlias(ResultSetMetaData resultSetMetaData, int column) throws SQLException {
// 获取列标签(通常是别名),并转为大写
String label = resultSetMetaData.getColumnLabel(column);
return label != null ? label.toUpperCase() : "";
}
}
}
修改配置文件使用重写的方言
# 方言
cytjdb.dialect=org.hibernate.dialect.MyDmUpperCaseDialect
修改后重启项目测试,全返回大写属性了
更多推荐


所有评论(0)