ПРИМЕЧАНИЕ. Относится только к стратегии SINGLE_TABLE
, см. Ответ @Tomazs для стратегии JOINED
.
Hibernate хранит явный подкласс, используемый в качестве некоторой формы перечисления, обычно какстроковое значение в базе данных.Вы можете установить имя этого столбца, используя аннотацию @DescriminatorColumn
, а затем использовать аннотацию @DiscriminatorValue
для подклассов.Когда Hibernate переходит к сохранению Account
в базе данных, любые строки, для которых характерно, например, Client
, все еще сохраняются для этого Account
, но имеют значение null
, а DiscriminatorColumn
устанавливается на "Account"
.Затем, когда организация десериализована, Hibernate смотрит на этот DiscriminatorColumn
, видит, что Organization
является Account
, и возвращает вам этот тип объекта.
DescriminatorColumn
можно изменитьиспользовать другие типы данных, например.не строки, используя параметр columnDefinition
.По умолчанию имя этого столбца равно DTYPE
, а значения для классов, у которых нет DiscriminatorValue
, являются именами классов.