Es gibt drei Tabellen, die als drei Entitäten modelliert sind:
%Vor%Jeder einzelne einzelne Datensatz der Prozess-Operations-Sequenz wird von der SQL mit einer 3-Wege-Join-Einschränkung erhalten:
%Vor%Um dies in JPA zu implementieren, muss ich eine Liste von Operationen erstellen, das würde explizit auf einen einzelnen Datensatz durch die JQPL-Gleichheit p.sequence = q.sequence
eingeschränkt werden %Vor%Wo JPQL die transitive 3. Join-Bedingung angibt:
%Vor%Ich möchte jedoch, dass alle drei Bedingungen in der Entity POJO modelliert werden. Sollte es keine Möglichkeit geben, JPA-Annotationen allein für dreiseitige Verbindungen zu verwenden? Wie der folgende Entity-Pseudocode zeigt:
%Vor%Es ist also nicht notwendig, die transitive Join-Bedingung in JPQL anzugeben
%Vor%Wie modelliere ich einen transitiven Join mithilfe von JPA-Annotationen?
Sie scheinen zu versuchen, eine Abfrage anstelle Ihrer Daten zu modellieren. Sie sollten Ihre Daten korrekt modellieren und dann Ihre Abfrage schreiben.
Sie scheinen
zu habenEreignis
Prozess
Bedienung
Um alle Vorgänge für ein Ereignis abzufragen, können Sie
verwenden %Vor%Um alle Objekte zurück zu bekommen, verwenden Sie
%Vor%Wenn Sie die Abfrage wirklich als Beziehung modellieren müssen, liegt dies außerhalb der JPA-Spezifikation, aber einige JPA-Anbieter unterstützen sie möglicherweise. In EclipseLink können Sie einen DescriptorCustomizer verwenden, um beliebige Beziehungen für die Verwendung beliebiger Ausdruckskriterien zu konfigurieren, oder Sie besitzen SQL.
Ihre Pseudo-Mappings sind fast die richtige Lösung, Sie müssen nur zwei @JoinColumn
s in einem @JoinColumns
: