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
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.
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
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.
Tags und Links hibernate