版本说明

spring版本:4.3.7
hibernate版本:5.1.17 Final
高斯数据库版本:gaussdb (GaussDB Kernel 505.1.0 build da28c417) compiled at 2024-04-18 22:54:55 commit 8474 last mr 17213 release

pom文件引入高斯数据库驱动

<!-- 高斯数据库驱动-->
        <dependency>
            <groupId>com.huaweicloud.dws</groupId>
            <artifactId>huaweicloud-dws-jdbc</artifactId>
            <version>8.1.0</version>
        </dependency>

配置高斯数据库连接

# 如果高斯是集群部署,多个地址使用逗号隔开,如ip1:port1,ip2:port2
cytjdb.url=jdbc:postgresql://ip:port/数据库名?currentSchema=模式名&targetServerType=master&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
cytjdb.username=用户名
cytjdb.password=密码
# 方言
cytjdb.dialect=org.hibernate.dialect.PostgreSQLDialect
cytjdb.validationQuery=SELECT 'x' FROM DUAL

程序之前用的oracle19,转为高斯数据库后发现字段全是默认小写,字段需要大写的话需要加双引号,sql也需要相应的加双引号,这样改造工作量很大,下面记录下全局修改的方式

数据库查询全返回小写属性了,而前端界面都是取得大写属性,导致前端无法正确取到属性,下面记录了两张方式、一种是重写方言(代码层面实现),一种是使用华为高斯给的新驱动、和配置方式(数据库层面实现)
在这里插入图片描述

一、重写hibernate方言转换字段大小写(代码层面实现)

MyPostgreSqlDialect.java

package org.hibernate.dialect;

import java.sql.ResultSetMetaData;
import java.sql.SQLException;

/**
 * @description:重写 pg 方言,设置hibernate结果集  返回的字段全为大写
 * @date: 2025/2/14
 * @author: gaom
 * @version: 1.0
 */
public class MyPostgreSqlDialect extends  org.hibernate.dialect.PostgreSQLDialect{
   public MyPostgreSqlDialect() {
        super();
    }

    @Override
    public ColumnAliasExtractor getColumnAliasExtractor() {
        return CustomColumnAliasExtractor.INSTANCE;
    }

    private static class CustomColumnAliasExtractor implements ColumnAliasExtractor {
        public static final CustomColumnAliasExtractor INSTANCE = new CustomColumnAliasExtractor();


        @Override
        public String extractColumnAlias(ResultSetMetaData resultSetMetaData, int i) throws SQLException {

            return resultSetMetaData.getColumnLabel(i).toUpperCase();
        }
    }

}

修改配置文件使用重写的方言

# 方言
cytjdb.dialect=org.hibernate.dialect.MyPostgreSqlDialect

修改后重启项目测试,全返回大写属性了
在这里插入图片描述

二、使用华为高斯新驱动,转换字段大小写(数据库层面实现)

pom引入新驱动jar

仓库没找到,我是自行上传到公司私服的

 <!-- 高斯数据库驱动 新版本-->
        <dependency>
            <groupId>com.huawei.gaussdb</groupId>
            <artifactId>gaussdbjdbc</artifactId>
            <version>1.0</version>
        </dependency>

srping-hibernate.xml 配置显式指定驱动

oralce等数据库阿里druid会自动识别、高斯需要指定driverClassName

 <property name="driverClassName" value="com.huawei.gaussdb.jdbc.Driver"/>

在这里插入图片描述

修改配置文件

# 这里是jdbc:gaussdb ,增加了 uppercaseAttributeName=true 配置来转换为大写
cytjdb.url=jdbc:gaussdb://ip1:port1,ip2:port2,ip3:port3/数据库名称?currentSchema=模式&uppercaseAttributeName=true&targetServerType=master&loggerLevel=OFF&connectTimeout=30&socketTimeout=30&loginTimeout=30&prepareThreshold=1&batchMode=on&fetchsize=10&defaultRowFetchSize=10
cytjdb.username=数据库用户名
cytjdb.password=密码
# 这里方言使用pg默认的方言即可
cytjdb.dialect=org.hibernate.dialect.PostgreSQLDialect
cytjdb.validationQuery=SELECT 'x' FROM DUAL
cytjdb.showSql=true
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐