当前位置: 首页 > 面试题库 >

使用除SINGLE_TABLE之外的任何其他Hibernate继承策略时,JVM崩溃

国景铄
2023-03-14
问题内容

好的,这可能是一个远景,但这是可行的。

在Java(JRE
1.6.0_26-b03)中,我有两个类SuperControl及其子类SubControl。它们都需要是持久性对象,而我正在使用Hibernate
Annotations来实现此目的。我大约有210个可以正确持久保存的类。除了一个不是。

我的问题是,SubControl除了以外,我拒绝以任何方式继承SINGLE_TABLE。当我说“拒绝”时,我的意思是 整个JRE崩溃

这有点问题,因为我真的很想SuperControl成为的映射超类SubControlSuperControl本身也可以是一个持久实体。奇怪的是,我在其他地方的代码中有一个完全并行的层次结构,可以正常工作。

这就是我要的:

@Entity
@MappedSuperclass
public class SuperControl extends ItsSuperClass {
  // ...
}

@Entity
public class SubControl extends SuperControl {
  // ...
}

但它炸毁了错误

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (c1_Optimizer.cpp:271), pid=5456, tid=1260
#  guarantee(x_compare_res != Constant::not_comparable) failed: incomparable constants in IfOp
#
# JRE version: 6.0_26-b03
# Java VM: Java HotSpot(TM) Client VM (20.1-b02 mixed mode, sharing windows-x86 )
# An error report file with more information is saved as:
# C:\eclipse\hs_err_pid5456.log

在不提供任何继承提示的情况下,Hibernate默认为SINGLE_TABLE(由于创建了DTYPE列,我可以告诉它)。我可以明确指定它,而不会导致JVM崩溃。

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class SuperControl extends ItsSuperClass {
  // ...
}

@Entity
public class SubControl extends SuperControl {
  // ...
}

最糟糕的部分是,如果我完全删除SubControl该类,或者甚至仅删除hibernate.cfg.xml文件中的类映射,JVM 仍然会
崩溃。这使我相信SuperControl和之间存在某种隐藏的联系SubControl。也许某些东西被缓存在Eclipse之类的东西中。我已经重新启动了Eclipse,完成了几次清理和构建,甚至重新启动了我的机器,问题仍然存在。

有任何想法吗?我已经为此工作了几个小时,却一无所获。

谢谢!


问题答案:

尝试使用Java 1.6.0_20,然后检查是否可行。您已经找到一个JVM错误,并且回溯6个次要版本可能足以使它运行。

您很幸运可以重现此错误,因此请创建一个最小的测试用例并将其发布到Oracle错误数据库。



 类似资料:
  • 问题内容: 尝试从数据库中列出带有简单约束的hibernate条件时出现错误 我有两个类:与关联。这两个类正在扩展,用于管理有关数据版本的信息-(创建和分配,谁和何时)。这两个类具有的重要意义。 执照 健身房 数据模型 的MySQL 例外: 我做错了什么? 问题答案: 尝试使用 也就是说,您将代替放置为第二个参数。

  • 我有一个实体照片映射在JPA/Hibernate,有三个不同的孩子(PhotoSpot,PhotoSecteur,PhotoVoie)。我使用了@继承(策略=继承类型。JOINED),一切工作正常的持久化方法,但我不能设法使其工作时,我想删除的照片之一。 我试图通过从父类中删除一个元素来删除一张照片,但我不知道这是否可行。我看了所有其他关于同一主题的帖子,我认为问题可能来自我的子实体有一个@man

  • 问题内容: 我有3个非抽象的可持久类。MyClubUser和HisClubUser类从User类继承。对于每个类,我为每个子类策略使用一张表。 我观察到的是,当我对User类进行查询时,生成的SQL使用左外部联接HisClubUser和MyClubUser。为什么Hibernate在我仅关注User的情况下[加入其他表]?我的观点是,即使检索到数据,鉴于返回了用户实例,我也无法访问MyClubUs

  • 由于某些原因,我无法使Hibernate继承策略=InheritanceType.Joint&onetoMany的组合工作。以下是这些实体。 @实体

  • 当我只有product类和两个用继承策略扩展product的类时,单表(product- 必须在根实体中定义鉴别器列,它将在子类com中被忽略。实例演示。实体电子学 产品类别 电子类: 智能手机类别: 我想把电子学课分成两个不同领域的实体。

  • 问题内容: 我正在考虑Hibernate管理的类层次结构的表布局,并且从某种意义上说,每个子类的表技术肯定是最合适的。但是,仔细考虑逻辑,我对它的性能有些担忧,尤其是随着子类数量的增加。 举一个非常简短(经典)的示例,假设您具有以下类: (我在取消getter和setter和Hibernate映射等,只是假设它们是基本的显而易见的情况)。 这些实体的数据库表很有意义,您可以很好地进行非规范化等等。