Hibernate 4.2.8,javassist 3.18.1和ClassCastExceptions –注意您的类路径
我写这篇文章是作为提示和警告,而不是绝对的解决方案。 我将尝试针对我的案例(WebSphere 8.5.5)返回一种解决方法,但是我确信其他开发人员和应用程序也会受到影响。 我已经花了一些时间来找出问题的原因,所以暂时,这篇文章将有助于增加上述关键字的搜索索引,并链接到休眠问题跟踪器。
在当前正在进行的项目中,由于Hibernate ORM 4.2.0版库中的错误,我决定在安装程序中将库版本向前移动并升级到最新版本。 Hibernate当前以版本4.2.8作为最新的JPA 2.0兼容版本,而4.3.0是第一个正式的JPA 2.1兼容。 由于我正在开发Jee6版本,因此我选择升级到4.2.8。
最终在4.2.8及更高版本中,库中实现了“ 严重的 ”内部API更改。 Hibernate迁移到javaassist的新版本,该版本引入了一些新的内部API调用和接口。 请参阅此处的链接问题。 因此,版本4.2.8将作为javassist- 3.18.1-GA的依赖项获取到您的应用程序。
最终,如果您碰巧引入了
- 对Javassist版本的多个依赖
- 一个容器通过“父级”类加载器为您的耳朵/战争提供了较旧的版本
然后,您将遇到类似这样的问题。 简而言之,如果您的容器中的活动类加载器偶然捕获了旧版本的javassist,则在加载jpa实体或执行相关代码时,您很可能会遇到奇怪的类强制转换异常或“未找到类”异常指向到过时的javassist API。
恕我直言,此更改应该已经引入到Hibernate的“主要”版本中,但是我很明白,有时开发人员的需求不能由全球开发人员用户社区的不同需求和设置来强制要求。 因此,这只是我对“应该存在”的看法,我仍然认为Hibernate是最好的Java ORM。
如果您遇到这种情况,请先采取以下措施:
- 检查您的可部署jar依赖项,并找到Javassist的任何其他实例,尤其是较旧的版本-根据您的容器和类加载设置检查如何加载它们。
- 如果您没有明确包括任何额外的依赖项,并且唯一的实例是“从休眠中获取”的实例(如我的案例),那么您需要检查是否从应用程序或服务器级共享库中加载了较旧版本的javassist或从应用程序服务器中的“共享”类加载器。 (我仍在为Websphere 8.5.5进行这一工作)。 您可以尝试共享库的加载顺序或类加载模式(父项优先/父项末次)
- 如果您找不到基于以上两点的解决方案,或者您尝试在应用程序上尝试使用类加载策略,并且证明确实很麻烦,那么只需切换到版本4.2.7 ,这似乎是最后一个解决方案。向后兼容旧版本的Javassist。
如果您是JBoss EAP 6.2和JBoss Wildfly 8用户,那么您会很安全,这意味着这些容器已经带有“最新” javassist版本,但是您仍然需要对应用程序可能引入的任何潜在冲突版本进行分类。
希望我会为我的情况提供解决方法。
翻译自: https://www.javacodegeeks.com/2014/01/hibernate-4-2-8-javassist-3-18-1-and-classcastexceptions-watch-out-your-classpath.html
Hibernate 4.2.8,javassist 3.18.1和ClassCastExceptions –注意您的类路径相关推荐
- spring入门(12)-spring与hibernate整合完成增删改查的操作(继承HibernateDaoSupport调用hibernateTemplate类)
本文是在上一篇博文的基础之上,通过继承HibernateDaoSupport调用hibernateTemplate类,只要将UserDaoImpl.java改为继承HibernateDaoSuppor ...
- Mybatis(18)注解实现表名和类属性名不匹配问题
解决方法,是通过Results注解 IUserDao.java /*查询所有用户*/@Select("select * from user")@Results(id = " ...
- 代码随想录第18天|找树左下角的值,路径总和,从中序和后序遍历序列构造二叉树
LeetCode513.找树左下角的值 题目链接:513. 找树左下角的值 - 力扣(LeetCode) 思路: 迭代法(只需要记录最后一行第一个节点的数值就可以了.): /*** Definitio ...
- RocketMQ命令整理
为什么80%的码农都做不了架构师?>>> 原创文章,转载请注明出处:http://jameswxx.iteye.com/blog/2091971 1.1. 控制台使用 Rock ...
- linux查看mq是否启动的命令,rocketmq查看命令
1.1. 控制台使用 RocketMQ 提供有控制台及一系列控制台命令,用于管理员对主题,集群,broker 等信息的管理: 登录控制台 首先进入RocketMQ 工程,进入/RocketMQ/bin ...
- 日志框架:slf4j-log4j12
slf4j Slf4j的全称是Simple Loging Facade For Java(Java简单日志门面),它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如 ...
- RocketMQ管理命令说明
1.1. 控制台使用 RocketMQ提供有控制台及一系列控制台命令,用于管理员对主题,集群,broker等信息的管理: l 登录控制台: 首先进入RocketMQ工程,进入/RocketMQ/b ...
- 深入字节码操作:使用ASM和Javassist创建审核日志
深入字节码操作:使用ASM和Javassist创建审核日志 原文链接:https://blog.newrelic.com/2014/09/29/diving-bytecode-manipulation ...
- 关于 hibernate 官网的例子 出现的问题
最近在 研究 hibernate ,按照 官网的 例子 我动手开始研究 maven ,但是 在 compile 的时候 居然 报错了 [ERROR] 'dependencies.depende ...
最新文章
- php 随机钱数,PHP 仿微信红包金额随机
- Python--进程、线程、协程对比
- 21个深度学习调参的实用技巧
- c语言Wndproc未定义,为什么我的老是未定义
- 谈论源码_当我们谈论软件“替代品”时,这是什么意思?
- 计算机课有什么作业,计算机组成原理课堂作业
- python 字典查询比列表快_为什么python字典要比列表快以及哈希查找解释。
- avalon2学习教程14动画使用
- 指纹和人脸识别 AI 总结
- 【校招】SHL 的 General Ability (GA, 通用能力测试)
- linux drm 写屏幕,Linux DRM Graphic 显示简单介绍
- 今天一篇文章告诉你Python 自动化测试 必会模块 Unittest
- 滴滴、京东、今日头条等名企招人了,保密推荐,提前拿offer,可过年后入职!
- Wxpython pannel切换
- 惠普暗影精灵4pro安装ubuntu16.04
- Switch 开关,将字写在滑块上面
- window10系统onedrive无法登陆 ox8004def7
- LaTex常用公式和字母
- Maven的settings.xml配置详解-阿里云仓库
- 唤醒词检测引擎Snowboy
热门文章
- php批量评价,彻底杜绝 WordPress 批量垃圾评论留言的三步曲
- 检查异常和非检查异常 有空你去学一下检查异常和非检查异常
- java运行环境变量及自定义变量
- rabbitmq手动确认ack
- 计算机器内存数量+引入和显示ARDS成员
- adf.test_在ADF 12.2.1.3中使用基于JSON的REST Web服务
- java中线程死锁及避免_如何避免Java线程中的死锁?
- java如何避免注释重复_Java 8中的可重复注释
- 上下文异常中的上下文属性_在没有适当上下文的情况下引发异常是一种不良习惯...
- 黑马2016java_2016年成功的Java开发人员简介