JPA继承entitymanager.find产生ClassCastException

2023-12-22

我有一个这样的类层次结构:

@Entity
@Table  (name="call_distribution_policies")
@Inheritance (strategy=InheritanceType.JOINED)
public class CallDistributionPolicy implements Serializable, Cloneable{
    ----------------
}

@Entity
@Table(name="skill_based_call_distribution_policies")
public class SkillBasedCallDistributionPolicy extends CallDistributionPolicy {

    --------------
}

public class CallDistributionPolicyDAOJPAImpl extends
    AbstractJPADAOImpl<CallDistributionPolicy> implements
    CallDistributionPolicyDAO {
}

    public CallDistributionPolicy get(long id) {
    try {
        Query query = entityManager
                .createQuery("from CallDistributionPolicy where id = :id");

        query.setParameter("id", id);

        List<CallDistributionPolicy> resultList = query.getResultList();

        if (!CollectionUtils.isEmpty(resultList)) {
            return resultList.get(0);
        }

        return null;
    } catch (EntityNotFoundException e) {
        return null;
    }
}
}

当我这样做时: log.debug(" 已加载: " + callDistributionPolicyDao.get(10).toString())

它打印 SkillsBasedCallDistributionPolicy 的 toString()

但是当我尝试像这样投射它时:

  SkillsBasedCallDistributionPolicy scdp =  (SkillsBasedCallDistributionPolicy) callDistributionPolicyDao.get(10)

我得到了类强制转换异常。

    com.vantage.callcenter.core.entity.acd.CallDistributionPolicy$$EnhancerByCGLIB$$334f3d1b cannot be cast to com.vantage.callcenter.core.entity.acd.SkillBasedCallDistributionPolicy 

instanceof 检查也失败!

当我在 eclipse 中检查对象时,我看到了 CGLIB 代理,但据我了解,CGLIB 代理应该扩展 SkillsBasedCallDistributionPolicy 类?在 CGLIB$CALLBACK_0 属性中,我可以看到实体类是“CallDistributionPolicy”,但目标是“SkillsBasedCallDistributionPolicy”。

加载子类的正确过程应该是什么?我可以看到 hibernate 正在生成所有正确的 SQL 并加载正确的子类,但是我如何检查 instanceof 并将其转换为子类?

我正在使用 hibernate 3.2.1 、 Spring 2.5.5 、 cglib2.1_3 。有什么建议么?


我知道这在很长一段时间内一直是 Hibernate 中的一个问题,例如:

  • 使用 Hibernate 代理对象时如何避免 ClassCastException http://andykayley.blogspot.com/2009/05/how-to-avoid-classcastexceptions-when.html)

我所说的问题是指错误,instanceof并且铸造应该可以正常工作。

但我无法使用 Hibernate 3.3.0.SP1 重现您的问题。两个都instanceof使用连接策略转换为层次结构的子类就可以了。测试用:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-cglib-repack</artifactId>
        <version>2.1_3</version>
    </dependency>

and

    <dependency>
      <groupId>javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.8.0.GA</version>
    </dependency>

我很确定 Jira 存在此问题,但找不到它。


问题(错误)在我的应用程序中是一致的。您可以在这里发布您的工作 pom.xml 以便我可以准确地看到您使用的 hibernate 依赖项吗?

下面是我使用的依赖项:

<project>
  ...
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.5.10</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
  ...
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>3.4.0.GA</version>
      <exclusions>
        <exclusion>
          <groupId>javassist</groupId>
          <artifactId>javassist</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-cglib-repack</artifactId>
      <version>2.1_3</version>
    </dependency>
    ...
  </dependencies>
</project>

这是依赖树:



[INFO] +- org.hibernate:hibernate-entitymanager:jar:3.4.0.GA:compile
[INFO] |  +- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile
[INFO] |  +- org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA:compile
[INFO] |  +- org.hibernate:hibernate-annotations:jar:3.4.0.GA:compile
[INFO] |  +- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile
[INFO] |  |  +- antlr:antlr:jar:2.7.6:compile
[INFO] |  |  \- commons-collections:commons-collections:jar:3.1:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.5.10:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  \- javax.transaction:jta:jar:1.1:compile
...
[INFO] \- org.hibernate:hibernate-cglib-repack:jar:2.1_3:compile
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA继承entitymanager.find产生ClassCastException 的相关文章

  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • 您建议使用哪种压缩(GZIP 是最流行的)servlet 过滤器?

    我正在寻找一个用于大容量网络应用程序的 GZIP servlet 过滤器 我不想使用容器特定的选项 要求 能够压缩响应负载 XML Faster 已在大批量应用的生产中得到验证 应适当设置适当内容编码 跨容器移植 可选择解压缩请求 谢谢 我
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 用于缓存的 Servlet 过滤器

    我正在创建一个用于缓存的 servlet 过滤器 这个想法是将响应主体缓存到memcached 响应正文由以下方式生成 结果是一个字符串 response getWriter print result 我的问题是 由于响应正文将不加修改地放
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • Lombok @Builder 不创建不可变对象?

    在很多网站上 我看到 lombok Builder 可以用来创建不可变的对象 https www baeldung com lombok builder singular https www baeldung com lombok buil
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • 如何从 Spring Boot 中排除依赖项

    我正在使用 Spring Boot 以下是我的 gradle 文件 buildscript ext springBootVersion 2 0 0 BUILD SNAPSHOT repositories mavenCentral maven
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • 使用 Java https 上传到 Imgur v3 错误

    我目前正在尝试使用他们当前的 API v3 上传到 imgur 但是我不断收到错误 错误 javax net ssl SSLException 证书中的主机名不匹配 api imgur com imgur com OR imgur com
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 检查应用程序是否在 Android Market 上可用

    给定 Android 应用程序 ID 包名称 如何以编程方式检查该应用程序是否在 Android Market 上可用 例如 com rovio angrybirds 可用 而 com random app ibuilt 不可用 我计划从
  • 将对象从手机共享到 Android Wear

    我创建了一个应用程序 在此应用程序中 您拥有包含 2 个字符串 姓名和年龄 和一个位图 头像 的对象 所有内容都保存到 sqlite 数据库中 现在我希望可以在我的智能手表上访问这些对象 所以我想实现的是你可以去启动 启动应用程序并向左和向

随机推荐

  • 无法将 CollectionProxy 对象传递给 ActiveJob

    我需要在后台标记一组消息 我正在使用delayed job gem 因为它在前台需要一些时间 所以我创建了一个ActiveJob class MarkMessagesAsReadJob 并通过了user and messages变量以标记所
  • 模仿 javascript || 的 Python 运算符操作员

    我是 Python 新手 所以可能不知道这是否显而易见 在 JavaScript 中a b回报a if a被评估为 true 否则返回b 除了冗长的 if else 语句之外 这在 Python 中是否可能 我相信这是正确的 x a or
  • iPad 未显示在 OSX Safari 上的“开发”菜单中

    我需要在 iPad 上调试 HTML 应用程序 我以前可以通过 USB 线将 ipad 连接到我的 Mac 它会显示在 Safari 的 开发 菜单中 我现在有两台 ipad 一台装有 iOS 6 另一台装有 iOS 7 iOS 6 的一台
  • Django 中的字节范围[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Django 中是否有 HTTP 字节范围的现有实现 IE 当客户端发送 Range 标头时 我希望我的
  • 是否有更有效或更简洁的方法来使用 tidyr::gather 使我的数据看起来“整洁”?

    我是使用 tidyverse 的新手 我想看看我使用这个包中的函数是否尽可能高效 简洁 我怀疑我不是 我的原始数据将键符号作为每个列名称的一部分 day a x b x a y b y 1 1 0 56047565 1 2240818 1
  • iOS9 更新 AFNetworking 调用以使用 HTTPS 的正确方法是什么(错误 -1200、-9824)?

    我正在从 iOS 8 切换到 iOS 9 之前通过 HTTPS 进行的 AFNetworking Web 服务调用不再有效 我越来越error 1200 and error 9824该问题与使用自签名证书有关 错误域 kCFErrorDom
  • RoundUp - AngularJS

    我正在使用以下代码来尝试和总结在角度 总体上有效 但是小于 0 5 的数字四舍五入为 0 我想round up每个数字到下一个整数 例如 0 02 应四舍五入为 1 data Virtual SumCores data Physical S
  • Java 返回错误“无法实例化类型”[重复]

    这个问题在这里已经有答案了 当我尝试初始化新对象时收到此错误消息 Cannot instantiate the type Car My code 主程序 java public class Main public static void m
  • Pex 和 Moles 项目还活跃吗?

    他们过去每月发布两个新版本 但自 2010 年 10 月以来 他们没有发布新版本 我发现了this http social msdn microsoft com Forums en pex thread e59d72ae 29fd 4251
  • 如何在交互式变基期间取消暂存文件(从旧提交中删除文件)?

    我读过Pro Git关于交互式变基以更改多个提交的书 所以我正在做git rebase HEAD 3 改了我想修改的一项edit 然后我可以通过更改消息git commit amend 并通过添加一个文件git add file3之后git
  • 打印和格式化字符串文字有什么区别?

    当我们可以使用第 8 行和第 9 行代码时 使用代码有什么意义print比如10号线 my name Zed A Shaw my age 35 my height 74 my weight 180 my eyes Blue my teeth
  • 如果我将数组初始化为大小 0 会发生什么?

    假设我有一个类似的函数 void myFunc List
  • AJAX 响应时间

    如何计算 AJAX 响应时间 我在脚本中需要这个 因为我得到服务器时间戳 但如果请求花费超过 1 秒 我需要在时间戳上添加 1 秒 您需要获取开始时间 就在 AJAX 请求完成之前 然后获取脚本完成时的结束时间 然后您可以计算出差异 如果大
  • pySerial 2.6:在 readline() 中指定行尾

    我正在使用 pySerial 向 Eddie 发送命令 我需要在我的阅读行中指定回车符 但 pySerial 2 6 去掉了它 有解决方法吗 这里有艾迪命令集 https www parallax com sites default fil
  • Spring data jpa,外部化本机查询

    我正在使用 Spring data jpa 来执行本机查询 这是示例 Query value select name from customer nativeQuery true public List
  • 播放 iOS 时从 HLS 流(视频)中提取/录制音频

    我正在使用 AVPlayer 播放 HLS 流 当用户按下录制按钮时 我还需要录制这些流 我使用的方法是分别录制音频和视频 然后最后合并这些文件以制作最终视频 并且远程 mp4 文件成功 但现在对于 HLS m3u8 文件 我可以使用 AV
  • log4j 用于独立的 java 项目

    我正在考虑将 log4j 用于我的独立 java 项目 是否可以将它用于 java 项目 而不是网络应用程序 如果可能的话 我应该如何初始化属性文件以及应该在哪里初始化 我放置了属性文件 目录结构 任何帮助表示赞赏 是的 这是可能的 我们一
  • Bing API v1 文档

    有谁知道我可以在哪里找到 Bongs API 的最新文档 网址如下 https api datamarket azure com Bing Search v1 Web 甚至他们自己的网站在我读过的单词文档中也有错误的 URL 即https
  • 列包含列 2

    我有一个数据框 我想测试 C 在每行上 B 列中的数字是否在字符串 A 列中 df pd DataFrame A me 123 me 123 1234 me 12 123 and B 123 123 123 123 6 我想得到 A B C
  • JPA继承entitymanager.find产生ClassCastException

    我有一个这样的类层次结构 Entity Table name call distribution policies Inheritance strategy InheritanceType JOINED public class CallD