记录一次hibernate3.1 方言问题

news2024/11/16 3:37:33

错误:com.sun.proxy.$Proxy553 cannot be cast to java.lang.string      

我们项目上,将mysql数据库迁移到达梦数据库,这样会造成数据库类型上在java查询下,会有不兼容的问题,比如clob,text等,可能都有问题,这就需要用方言去解决了。

    之前text就出现了报错,找了半天也没能解决,后来改成了varchar(8000),虽然 改了不报错了,感觉可能会有隐患,只是项目上要的紧,只好先这样了。

  今天有个功能用到了colb,仍然报错,虽然错误的输出不一样,但是错误的根源是一样的,就是数据库字段和对应的hibernate解释的字段不匹配。

  据我分析,我需要将数据库对应的字段,映射到hibernate的string上,就可以展示了,可是问题来了,在网上找了很多,都是用这种去写的:

registerHibernateType(Types.DATE, Hibernate.TIMESTAMP.getName());//自定义数据类型

也行别的版本,这样写可能会成功,但是我用的hibernate3.1 根本不可以。

仍然会报错。

第一天就这样过去了,第二天就痛定思痛,只是找网上的资料不知道什么时候才能解决,我最后决定跟着源码走,思路很清晰,就是要找到映射这一块,看看为啥没有映射成功。

eclipse无法在jar包里面加断点,一上午渡过去,仍然没有找到具体位置。

下午的时候,决定用idea,虽然时间过去不少了,但是工欲善其事必先利其器,用idea可以在jar里面加断点去看源码,所以使用idea很快找到了关键点。

 protected void autoDiscoverTypes(ResultSet rs) {
        try {
            Metadata metadata = new Metadata(this.getFactory(), rs);
            List aliases = new ArrayList();
            List types = new ArrayList();
            this.rowProcessor.prepareForAutoDiscovery(metadata);

            for(int i = 0; i < this.rowProcessor.columnProcessors.length; ++i) {
                this.rowProcessor.columnProcessors[i].performDiscovery(metadata, types, aliases);
            }

            this.resultTypes = ArrayHelper.toTypeArray(types);
            this.transformerAliases = ArrayHelper.toStringArray(aliases);
        } catch (SQLException var6) {
            throw new HibernateException("Exception while trying to autodiscover types.", var6);
        }
    }

这个关键点找到了,在【performDiscovery】方法中,就是做映射的,为啥不成功,进去一看便知:

public class TypeNames {
    private Map<Integer, Map<Integer, String>> weighted = new HashMap();
    private Map<Integer, String> defaults = new HashMap();

    public TypeNames() {
    }

    public String get(int typecode) throws MappingException {
        String result = (String)this.defaults.get(typecode);
        if (result == null) {
            throw new MappingException("No Dialect mapping for JDBC type: " + typecode);
        } else {
            return result;
        }
    }

关键的方法就是在这里,TypeNames.get(),这个方法,获取方言配置类里面的映射,是取的TypeNames.default这个Map里面的数据,到这里问题就基本明确了。

切记,hibernate3.1的方言,数据类型的转换,一定是这个:

this.registerColumnType(Types.CLOB,StandardBasicTypes.STRING.getName());

如果需要把达梦其他数据类型转换为string,如果你不知道那个数据类型的int值,可以跟代码去查看,在类:

org.hibernate.loader.custom.CustomLoader 的方法autoDiscoverTypes中加上断点,查看对应的解决方案就可以了。

至此困扰我多次的这个方言问题解决了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1211893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chrome 浏览器经常卡死问题解决

Chrome 浏览器经常卡死问题解决 chrome 任务管理器杀进程 mac 后台有很多 google chrome helper 线程并且内存占用较高 一直怀疑是插件的锅 其实并不是-0- 查看是哪个网页&#xff0c;哪个插件占用内存 chrome 更多工具 -> 任务管理器 切换到稳定版本的 chrome&#xff0c…

架构开发与优化咨询和实施服务

服务概述 得益于硬件平台算力的提升&#xff0c;汽车电子电气架构的集成度逐渐提高&#xff0c;从单体ECU、到功能域集成控制器、到区域集成控制器&#xff0c;多域融合成为了目前行业中软件工程的重要工作内容。同时&#xff0c;在传统控制器C代码开发的基础上&#xff0c;C、…

Postman实现接口的加密和解密

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 1、目前市面上的加密的方式 对称式加密&#xff1a;DES&#xff0c;AES&#xff0c;Base64加密算法 非对称加密&#xff1a…

电机应用-控制系统、PID

控制系统 对生产中某些关键性参数进行自动控制&#xff0c;使它们在受到外界干扰&#xff08;扰动&#xff09;的影响而偏离正常状态时&#xff0c;能够被自动地调节而回到工艺所要求地数值范围内。 自动控制系统分为&#xff1a;开环、闭环。 闭环自动控制系统原理 闭环控制是…

竞赛 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

springboot集成swagger3+解决页面无法访问问题

引入依赖 pom文件引入swagger3依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>配置启动文件 swagger使用ant_pattern_parser解析…

【Mycat2实战】三、Mycat实现读写分离

1. 无聊的理论知识 什么是读写分离 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff0c; 而从数据库处理查询操作。 为什么使用读写分离 从集中到分布&#xff0c;最基本的一个需求不是数据存储的瓶颈&#xff0c;而是在于计算的瓶颈&#xff…

第六届浙江省大学生网络与信息安全竞赛 2023年 初赛/决赛 WEB方向 Writeup

-------------------【初赛】------------------- easy php 简单反序列化 __debuginfo()魔术方法打印所需调试信息&#xff0c;反序列化时候执行&#xff01; 链子如下&#xff1a; BBB::__debuginfo()->CCC::__toString()->AAA::__call()EXP&#xff1a; <?php…

汽配零件发FBA美国专线

随着电商的迅速发展&#xff0c;跨境电商平台如亚马逊的FBA(Fulfillment by Amazon)服务成为了许多商家选择的销售渠道。对于汽配零件行业来说&#xff0c;发FBA美国专线可以打开更广阔的市场&#xff0c;并且有望获得可观的发展前景。下面将从市场分析和前景两个方面来探讨汽配…

多目标跟踪指标

Avg rank This is the rank of each tracker averaged over all present evaluaion measures 这是每个跟踪器在所有现有评估指标上的平均排名。 MOTA Multiple Object Tracking Accuracy This measure combines three error sources &#xff1a;false positives&#xf…

报错缺少class(org.apache.hadoop.hdfs.DistributedFileSystem)

平台报错缺少 java.lang.RuntimeException:java.lang.ClassNotFoundException: Class org.apache.hadoop.hdfs.DistributedFileSystem not found 实则是缺少jar包 hadoop-hdfs-client-3.1.1.3.1.0.0-78.jar 找到对应的jar放到程序的lib中即可

2023 年是无代码的一年,还要程序员吗?

从 Code 到 No Code&#xff0c;IT 界对简化代码开发的需求由来已久&#xff1a;过去数十年的发展历程中&#xff0c;在企业应用程序开发上&#xff0c;我们研发出工作流、智能业务流程管理系统、低代码/无代码、还有高生产力应用程序平台等应用开发形式。 有一句话在 IT 界流…

海康设备、LiveNVR等通过GB35114国密协议对接到LiveGBS GB28181/GB35114平台的详细操作说明

一、LiveNVR通过GB35114接入LiveGBS 1.1 开启LiveGBS 35114功能 信令服务livecms.ini配置文件中[sip]增加一行gm1 启动LiveCMS 1.2 生成设备端证书 我们用LiveNVR做为设备端向LiveGBS注册&#xff0c;这里先生成LiveNVR的设备证书&#xff0c;并将LiveNVR的设备证书给LiveGB…

人工智能基础_机器学习036_多项式回归升维实战3_使用线性回归模型_对天猫双十一销量数据进行预测_拟合---人工智能工作笔记0076

首先我们拿到双十一从2009年到2018年的数据 可以看到上面是代码,我们自己去写一下 首先导包,和准备数据 from sklearn.linear_model import SGDRegressor import numpy as np import matplotlib.pyplot as plt X=np.arange(2009.2020)#左闭右开,2009到2019 获取从2009到202…

中国人民大学与加拿大女王大学金融硕士——人生下半场,用实力为自己“撑腰”

人生如同一场漫长的旅程&#xff0c;每个人都在不断地前行&#xff0c;经历着种种的人生阶段。当我们迈入人生的下半场&#xff0c;我们不再是无知少年&#xff0c;而是逐渐成为社会的中坚力量。在这个阶段&#xff0c;我们不仅要面对更多的挑战和压力&#xff0c;还需要用实力…

等保到底在“保”什么?

在信息时代&#xff0c;等保评级成为衡量企业信息安全水平的重要标准。那么&#xff0c;什么是等保评级呢&#xff1f;等保合规到底保的是什么呢&#xff1f;一起来看看吧。 编辑搜图 请点击输入图片描述&#xff08;最多18字&#xff09; 等保评级&#xff0c;会从七个维度进…

总结 MyBatis 的XML实现方法(使用XML使用实现数据的增删改查操作)

MyBatis是一个优秀的持久层框架&#xff0c;它的XML配置文件是实现数据库操作的关键之一。通过XML文件&#xff0c;可以定义SQL语句、映射关系和一些高级功能。下面将探讨下如何使用MyBatis的XML配置文件实现数据的增、删、改、查操作。 1.配置文件 首先要确保 mybatis-confi…

基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.15)

1.任务所需实现基本功能 关机状态时白灯亮蓝灯灭&#xff0c;此时长按按键无反应&#xff0c;白灯亮度降低的状态&#xff0c;蓝灯保持灭的状态。点按按键一次&#xff0c;白灯熄灭&#xff0c;蓝灯亮此时W引脚控制的灯亮。继续点按按键。蓝灯亮&#xff0c;此时W引脚控制的灯…

OSPF常用配置例子

拓朴图如下&#xff1a; 配置步骤&#xff1a; 1.配置IP 2.ospf多区域配置 *Tips&#xff1a;undo info-center enable 关闭信息回显 3.出口设备注入默认路由&#xff08;完成标志是各路由器学习到默认路由&#xff0c;下发默认路由&#xff09; R1]default-route-adve…