Как обрабатывать наследование JPA с помощью Apache CXF FIQL и Criteria API (JPACriteriaQueryVisitor)? [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как обрабатывать наследование JPA с помощью Apache CXF FIQL и Criteria API (JPACriteriaQueryVisitor)? [закрыто]

Сообщение Anonymous »

Я работаю над репозиторием Quarkus JPA, где использую Apache CXF FIQL с JPACriteriaQueryVisitor для построения динамических запросов.
Это хорошо работает для простых сущностей, но я сталкиваюсь с проблемами при использовании наследования JPA с объединенной стратегией.
Когда фильтр ссылается на поля в подклассе, я получаю следующее исключение:

Код: Выделить всё

org.hibernate.sql.ast.SqlTreeCreationException: Could not locate TableGroup -  fr.xx.infrastructure.xxxdb.po.InsuranceCompanyPO(242463422545909) 
⚙️ Структура сущности

Код: Выделить всё

@Inheritance(strategy = InheritanceType.JOINED)
public class PersonPO { ... }

@PrimaryKeyJoinColumn(name = "ID_PER")
public class LegalPersonPO extends PersonPO { ... }

@PrimaryKeyJoinColumn(name = "ID_PER")
public class InsuranceCompanyPO extends LegalPersonPO { ... }
Метод репозитория (упрощенный)

Код: Выделить всё

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery
 cq = cb.createQuery(PersonPO.class);
Root root = cq.from(PersonPO.class);

SearchCondition filter = new FiqlParser(PersonPO.class).parse(stringFilter);
JPACriteriaQueryVisitor visitor =
new JPACriteriaQueryVisitor(em, PersonPO.class, PersonPO.class);
filter.accept(visitor);

cq = visitor.getQuery();
root = (Root) cq.getRoots().iterator().next();
Predicate predicate = cq.getRestriction();
cq.where(predicate);
Когда я пытаюсь объединить предикаты из запросов подкласса в запрос базового класса, Hibernate выдает исключение «Не удалось найти TableGroup».
Когда я фильтрую по атрибутам подкласса (например, InsuranceCompanyPO.companyName==XYZ), я получаю сообщение «Не удалось найти TableGroup». ошибка.
Вопрос
Как правильно обрабатывать запросы FIQL с наследованием JPA (объединенная стратегия) с помощью JPACriteriaQueryVisitor?
Существует ли стандартный способ сообщить посетителю о таблицах подклассов или мне это нужно вручную управлять вызовамиtreat() или разрешением типов?

Подробнее здесь: https://stackoverflow.com/questions/797 ... pacriteria
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»