Похоже, что если вы делаете ленивую выборку, как вы делаете с getSeat, вы всегда будете получать только родителя, а не подкласс.Я попробовал этот же пример с FetchType.EAGER и getSeat правильно возвращает LeatherSeat.
Я не уверен, почему hibernate может получить Автомобиль с LeatherSeat, когда для получения EAGER, но hibernate не может получить его, когда делает LAZY.Похоже, что-то там сломано.
В InheritanceType есть заявка на столбцы дискриминатора, в которой указывается точка зрения на этот сценарий.https://hibernate.onjira.com/browse/ANN-140 но билет был отклонен, указывая на то, что режим гибернации был слишком элегантным, чтобы нуждаться в дискриминаторе для InheritanceType.JOINED.Тем не менее он не может правильно вернуть подклассы при отложенных выборках.
Тогда этот билет https://hibernate.onjira.com/browse/HHH-271?focusedCommentId=44089#comment-44089 более специфичен для этой проблемы, и там был ответ: «Как мы должны знать, какой подкласс получить при ленивом извлечении?»
Оба билета старые и были отклонены.Похоже, проблема для меня.Но сейчас вам придется перейти на другой тип наследования или использовать нетерпеливый тип выборки, так как это соответствует дизайну hibernate.