首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Hibernate版本从4.3.11.Final升级到5.6.3. from导致ClassCastException:无法将java.lang.Integer转换为java.lang.Long

将Hibernate版本从4.3.11.Final升级到5.6.3. from导致ClassCastException:无法将java.lang.Integer转换为java.lang.Long
EN

Stack Overflow用户
提问于 2022-01-12 08:47:13
回答 2查看 874关注 0票数 1

我有一个使用Hibernate 4.3.11的应用程序。我决定将Hibernate版本升级到5.6.3.Final。在更改pom依赖项之后,一旦我尝试登录/运行应用程序,我就会反复获得java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

相同的查询在以前的Hibernate-4版本中运行良好,并返回正确的结果集,但现在它在将其升级到Hibernate-5之后抛出异常。

我想知道这两个版本之间是否存在数据类型的差异。如何修复此异常。此外,我还使用MySQL进行数据库连接,并使用jdk-8。

下面是我现在拥有的pom.xml的快照:

代码语言:javascript
复制
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.6.3.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>5.6.3.Final</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

代码片段如下:

代码语言:javascript
复制
String sqlQuery = "Select user_id, appl_id, user_name from User where delete_flag = 'N'";
NativeQuery sqlQry = hibernateSession.createSQLQuery(sqlQuery);
List<ObjectName> resultList = sqlQry.list();

下面是整个异常日志:

代码语言:javascript
复制
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
    at org.hibernate.type.descriptor.java.LongTypeDescriptor.unwrap(LongTypeDescriptor.java:19) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:46) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:73) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:276) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:271) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.custom.sql.NamedParamBinder.bind(NamedParamBinder.java:34) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.custom.CustomLoader.bindParameterValues(CustomLoader.java:475) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.bindPreparedStatement(Loader.java:2150) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:2127) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2059) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:2037) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.doQuery(Loader.java:956) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:357) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2868) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.doList(Loader.java:2850) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2682) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.Loader.list(Loader.java:2677) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2181) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1204) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:177) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1617) ~[hibernate-core-5.6.3.Final.jar:5.6.3.Final]
EN

回答 2

Stack Overflow用户

发布于 2022-01-12 10:29:14

Long

  • Or可能是由于 int Integer,尝试将int替换为IntegerE 110longE 211,这样您可能会得到一个E 116longE 217将要存储在int类型变量H 218G 219中的数字值。
票数 0
EN

Stack Overflow用户

发布于 2022-01-21 07:52:00

针对这个特定问题,我得到的首选解决方案是将Hibernate版本升级到Hibernate-5.1.0.Final,这可能是当前项目环境中最高的工作版本。

您需要为此进行的另一个小的额外更改是,将hibernateSession.getTransaction().isActive()转换为hibernateSession.getTransaction().getStatus() == TransactionStatus.ACTIVE。否则,您将得到编译错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70678584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档