Хорошо, это, вероятно, длинный снимок, но здесь идет.
В Java (JRE 1.6.0_26-b03) у меня есть два класса, SuperControl
и его подкласс SubControl
. Они оба должны быть постоянными объектами, и я использую аннотации Hibernate для достижения этой цели. У меня есть приблизительно 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, сделал несколько сборок и даже перезапустил мою машину, и проблема все еще остается.
Есть идеи? Я работал над этим часами и ничего не получил.
Спасибо!