わかりました、これはおそらくロングショットですが、ここに行きます。
Java (JRE 1.6.0_26-b03) には、2 つのクラスSuperControl
とそのサブクラスがありSubControl
ます。どちらも永続オブジェクトである必要があり、これを実現するために Hibernate Annotations を使用しています。正しく永続化されている約 210 のクラスがあります。1つがそうでないことを除いて。
私の問題は、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 を再起動し、いくつかのクリーン アンド ビルドを実行し、さらにマシンを再起動しましたが、問題は解決していません。
何か案は?私はこれに何時間も取り組んできましたが、どこにも行きませんでした。
ありがとう!