У меня есть класс сущности и подкласс, основанный на этой сущности:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class A
и
@Entity
public class B extends 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 изменяется.
У меня такой вопрос: как я могу выполнить запрос с использованием хранимой процедуры для объекта, для которого определено наследование?