Wie gehe ich mit der JPA-Vererbung mit Apache CXF FIQL und Criteria API (JPACriteriaQueryVisitor) um? [geschlossen]Java

Java-Forum
Anonymous
 Wie gehe ich mit der JPA-Vererbung mit Apache CXF FIQL und Criteria API (JPACriteriaQueryVisitor) um? [geschlossen]

Post by Anonymous »

Ich arbeite an einem Quarkus JPA-Repository, in dem ich Apache CXF FIQL mit JPACriteriaQueryVisitor verwende, um dynamische Abfragen zu erstellen.
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) 
⚙️ Entitätsstruktur

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 { ... }
Repository-Methode (vereinfacht)

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 versuche, Prädikate aus Unterklassenabfragen in der Basisklassenabfrage zu kombinieren, löst Hibernate die Ausnahme TableGroup konnte nicht gefunden werden aus.
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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post