【问题标题】:Problem loading subclasses of hibernate entity加载休眠实体的子类时出现问题
【发布时间】:2011-08-14 15:09:51
【问题描述】:

我有一个实体 A,它是实体 B 和 C 的超类,A 用 @Inheritance(strategy = InheritanceType.JOINED) 注释。

然后是另一个与 A 有关系的实体 X。

我用一些 B 类型的对象设置 x.a,但是当我加载 x 并检查 x.a 的类型时,它是 A,我不能将它转换为 B。

我以前做过很多这样的映射,它工作正常,不知道这里有什么问题。

此外,当我执行 entityManager.find(A.class, id) 时,它也返回 A,尽管有一个具有相同 id 的实体 B,当我从 Junit 测试运行它时它返回 B,但在运行应用程序时不返回Tomcat服务器。

【问题讨论】:

  • 给我们一些代码来分析。

标签: hibernate hibernate-mapping


【解决方案1】:

听起来您可能会获得代理而不是实际实例,这就是您无法转换为子类的原因。以下内容可能会帮助您解开代理:

Converting Hibernate proxy to real object

【讨论】:

    【解决方案2】:

    你会遇到这个与 Hibernate 的延迟加载机制有关的问题。 Hibernate 将每个延迟加载的对象包装到所谓的代理对象中。当您从数据库加载 x 时,您的对象 x.a 的类型将是 HibernateProxy

    我发现这个解决方案很有用(类似于 @Abdullah 的)。

    How to unproxy a hibernate object

    您也可以急切地获取关系x.a 以避免此问题,因此不会创建代理对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多