Es funktioniert gut für einfache Entitäten, aber ich habe Probleme, wenn ich die JPA-Vererbung mit einer verbundenen Strategie verwende.
Wenn der Filter auf Felder in einer Unterklasse verweist, erhalte ich diese Ausnahme:
Code: Select all
org.hibernate.sql.ast.SqlTreeCreationException: Could not locate TableGroup - fr.xx.infrastructure.xxxdb.po.InsuranceCompanyPO(242463422545909) Code: Select all
@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 { ... }
Code: Select all
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);
Wenn ich nach Unterklassenattributen filtere (z. B. InsuranceCompanyPO.companyName==XYZ), erhalte ich die Fehlermeldung „TableGroup konnte nicht gefunden werden“.
Frage
Wie kann ich FIQL-Abfragen mit JPA-Vererbung (verknüpfte Strategie) mit dem JPACriteriaQueryVisitor korrekt verarbeiten?
Gibt es eine Standardmethode, um den Besucher auf Unterklassentabellen aufmerksam zu machen, oder muss ich die treat() manuell verwalten? Aufrufe oder Typauflösung?
Mobile version