好的,这可能是一个远景,但这里有。
在Java(JRE 1.6.0_26-b03)中,我有两个类SuperControl
及其子类SubControl
。它们都需要是持久对象,而我正在使用Hibernate Annotations来实现这一点。我有大约210个正确持久的类。除了一个不是。
我的问题是SubControl
拒绝以SINGLE_TABLE
之外的任何方式继承。当我说“拒绝”时,我的意思是整个JRE崩溃。
这有点问题,因为我真的更喜欢SuperControl
成为SubControl
的映射超类。 SuperControl
本身也可以是一个持久性实体。奇怪的是,我的代码中有一个完全并行的层次结构,可以正常工作。
这就是我想要的:
@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,完成了几次清理和构建,甚至重新启动了我的机器,问题仍然存在。
有什么想法吗?我已经在这方面工作了好几个小时而且无处可去。
谢谢!
答案 0 :(得分:6)
这看起来像是bug 7042153,也就是5月初报道的2210012。
请注意一个用户提供的解决方法:使用“-server”JVM选项为它们修复它。
答案 1 :(得分:3)
尝试Java 1.6.0_20,并检查它是否有效。您已经发现了一个JVM错误,并且可能需要返回6个次要版本才能使其运行。
您很幸运能够重现此错误,因此请创建一个最小的测试用例并将其发布到Oracle错误数据库。