У меня есть класс сущности и подкласс на основе этого объекта:JPA Native запросы для лица с наследованием
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class A
и
@Entity
public class B extends A
мне нужно выдать родной запрос, который использует хранимую процедуру только для базового класса (A). Если я попытаюсь это следующим образом:
entityManager.createNativeQuery("select * from A a where procedure(f)",A.class).getResultList()
Я получаю сообщение об ошибке относительно «Столбец clazz_ не был найден в ResultSet». Я предполагаю, что поставщик JPA добавляет этот столбец, чтобы различать базовый класс и расширенный класс. Я могу обойти эту проблему путем явного добавления столбца clazz и все поля из подкласса:
entityManager.createNativeQuery("select *,1 as clazz_,null as prop1,null as prop2 from A a where procedure(f)",A.class).getResultList()
где «prop1» и «prop2» является свойством подкласса B. Однако, это кажется ненужным взломать и подвержен проблемам обслуживания, если подкласс B изменяется.
Мой вопрос: Как я могу запросить использование хранимой процедуры для объекта с наследованием, определенным на нем?
Итак, я думал об этом, но проблема в том, что, когда Hibernate попытки раздуть объект из ResultS et row, он обнаруживает два столбца id, один из которых имеет значение null. Я полагаю, что я могу добавить дополнительный параметр where, где выбраны фильтры: b.id - null. – AnthonyF
Вопрос в том, когда мы напишем его таким образом, будем ли мы всегда получать экземпляры класса B? –