Der beste Weg, um 2 Tabellen mit Hibernate zu verbinden

9

Ich habe 2 Hibernate-Entitäten / -Tabellen und muss Informationen aus beiden für die Verwendung in einer Ansicht kombinieren. Die Tabellen sind

%Vor%

Es gibt eine Eins-zu-viele-Beziehung zwischen Client und Termin basierend auf clientID. In regulärem SQL würde ich einfach etwas sagen wie:

%Vor%

und verwenden Sie das Re-Cord-Set, das zurückgegeben wurde.

Ich bin nicht sicher, wie man das in Hibernate macht. Soll ich eine ClientAppt-Entität erstellen und dann etwas wie oben beschrieben auswählen (etwas für HQL geändert)?

Beachten Sie, dass ich an den SecondaryTable-Ansatz gedacht habe, aber ich denke, dass dies eine 1: 1-Beziehung erfordert? Ich nehme an, ich könnte eine Eins zu vielen zuordnen, aber gibt es eine Alternative? Dies ist eine einmalige Änderung und das Mapping einer Eins-zu-Viele-Beziehung könnte für etwas so Kleines ein bisschen teuer sein? Was ist der beste Ansatz? Danke

    
Dave 19.09.2012, 01:38
quelle

5 Antworten

2

Sie können dies auf viele Arten modellieren. Was ich tun würde, ist, dass der Client eine Entität ist und die verschiedenen Termine eine Elementsammlung sein müssen. Sie haben keine Sprache angegeben, aber in Java wäre es wie folgt:

%Vor%

Sie können Clients dann mit der von Ihnen bevorzugten Methode abrufen, mit dem einfachsten Ergebnis:

%Vor%

Hibernate führt den Join aus und gibt ein Client-Objekt mit einer Reihe von Terminen zurück. Sie können weiter gehen, um ein SortedSet zu setzen oder einen Index hinzuzufügen, um daraus eine Liste zu machen.

    
sharakan 19.09.2012, 02:44
quelle
4

Der "beste" Weg (imho) ist nicht der normale SQL-Weg zu denken. Denken Sie nicht daran, bestimmte Felder auszuwählen, und es gibt Tabellen, denen Sie beitreten. Sie sollten versuchen, sinnvolle Geschäftsentitäten zu erstellen, und Sie sollten an diesen Geschäftsentitäten arbeiten.

Hier ist zum Beispiel, was ich tun würde:

(nicht wirklich Code, zeige nur die Idee)

%Vor%

Bei der obigen Zuordnung müssen Sie lediglich eine HQL from Appointment a where a.client.id = :whatEverIdYouWant ausführen oder, um die zusätzliche Abfrage in der DB zu speichern, from Appointment a join fetch a.client where a.client.id = :whatEverIdYouWant

Sie können auch das @ sharakan-Mapping hinzufügen, wenn Ihr Design Client abhängig vom Termin nicht stört

    
Adrian Shum 19.09.2012 03:13
quelle
1

Sie sollten Projections.alias verwenden, um die Liste der Spalten anzugeben, an denen Sie interessiert sind. Weitere Informationen finden Sie im Hibernate-Handbuch hier zum Beispiel.

    
Vikdor 19.09.2012 02:36
quelle
0

Haben Sie Ihren Code mit Beziehungsmetadaten versehen? Wenn Sie das getan haben, sollten Sie in der Lage sein, einfach nach der Liste der Clients zu suchen und dann ihre Termine auf das Feld zugreifen zu lassen, das sie enthält.

    
mariosangiorgio 19.09.2012 02:39
quelle
0
%Vor%     
vibol rim 18.10.2017 03:26
quelle

Tags und Links