JPA 3-Wege-Join-Annotation

9

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?

    
Blessed Geek 02.10.2012, 20:23
quelle

2 Antworten

2

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 haben

Ereignis

  • Prozess
  • ManyToOne (Prozess-ID)

Prozess

  • Ereignisse - OneToMany
  • Operationen - OneToMany

Bedienung

  • Prozess - ManyToOne (Sequenz) (dieser ist ein wenig seltsam, da die Sequenz nicht die ID ist, dies ist außerhalb der JPA-Spezifikation, aber einige JPA-Anbieter können dies unterstützen)

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.

    
James 03.10.2012 13:05
quelle
1

Ihre Pseudo-Mappings sind fast die richtige Lösung, Sie müssen nur zwei @JoinColumn s in einem @JoinColumns :

%Vor%     
Dragan Bozanovic 09.02.2016 18:17
quelle

Tags und Links