Проблема в том, что вы получаете список А, а Hibernate не знает достаточно, чтобы создать В или С в списке на основе формулы дискриминатора.К счастью, есть аннотация, чтобы справиться с этим.
Некоторые люди называют это ошибкой, и я склонен согласиться.В любом случае, абстракция выглядит немного утечкой.
Добавьте аннотацию @ForceDiscriminator
к родительскому объекту (A
), и она, вероятно, будет работать правильно.
Это решениеHibernate-специфичны.Я не уверен, распространяется ли проблема на JPA в целом или есть решение JPA.
РЕДАКТИРОВАТЬ:
Это, кажется, не сработало.
Возможно, стоит попробовать получить SQL, который Hibernate генерирует для вас.
Добавьте
<property name="hibernate.show.sql" value="true" />
в конфигурацию hibernate и посмотрите, что произойдет.
Получение этого sql с предложением force и без него может дать подсказки относительно того, что именно делает силаи почему он не работает.
В настоящий момент я не могу думать ни о чем другом, кроме того, что NULL
в вашей формуле дискриминатора выглядит немного рискованно.