Это хорошо работает для простых сущностей, но я сталкиваюсь с проблемами при использовании наследования 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);
Когда я фильтрую по атрибутам подкласса (например, InsuranceCompanyPO.companyName==XYZ), я получаю сообщение «Не удалось найти TableGroup». ошибка.
Вопрос
Как правильно обрабатывать запросы FIQL с наследованием JPA (объединенная стратегия) с помощью JPACriteriaQueryVisitor?
Существует ли стандартный способ сообщить посетителю о таблицах подклассов или мне это нужно вручную управлять вызовамиtreat() или разрешением типов?
Подробнее здесь: https://stackoverflow.com/questions/797 ... pacriteria
Мобильная версия