Существует несколько способов, каждый из которых имеет свои собственные предостережения.
1) Добавьте аннотации следующим образом:
@DiscriminatorFormula("0")
@DiscriminatorValue("0")
class BaseClass{ }
@DiscriminatorValue("00")
class SubClass extends BaseClass{ }
, где значение дискриминатора подклассов должно отличаться от базового класса 'но также оценивать то же значение при передаче в метод Integer.valueOf (String s).
Предупреждение - если вы возвращаете объект из Hibernate базового класса, а затем снова при вызове типа подкласса, который выполучит ошибку с жалобой, что загруженный объект был неправильного класса.Если вы сначала вызовете запрос подкласса, то вызов базового класса вернет подкласс.
2) Используйте представление в базе данных, чтобы отобразить таблицу и использовать его в качестве таблицы подкласса.Фактически это может быть любой другой класс, который соответствует сопоставлениям столбцов, так как Hibernate считает, что это совершенно отдельная таблица.
Предостережение - у вас будет возможность создать одну и ту же строку в виде двух разных объектов, которые не будут синхронизированы и могут привести кк конфликтующим / потерянным обновлениям базы данных.
Вероятно, лучше придерживаться одного типа для сеанса, и это можно было бы обработать без рисков времени выполнения, используя xml-файл сопоставления сущностей, который переопределяет DiscriminatorValue желаемого класса для соответствияпостоянное значение Discriminator'Formula, которое вы можете передать в исходную конфигурацию.