# Hibernate Mapping



## SegFault (26. Nov 2009)

So, die Grundlagen wären geschafft. Hibernate läuft.

Jetzt kommen die Komplexeren Fragen. Folgendes Beispiel.
Ich habe eine Entity: 
Kunde (Name, Adresse etc.)
und eine 1:n beziehung zu dem Entity
Auftrag (Datum, ...)
das ganze sind halt auch typische Klassen. Nun könnte es aber ein Feld für Kunden (Letzter Auftrag am: ) geben der auf Grund der Beziehung den letzten Auftrag referenziert wird. Kurz gesagt. Es wäre eine art Read Only Wert der nur beim auslesen eines Kunden gelesen wird sofern ein (oder mehrere) Auftrag dazu existiert. Ansonsten wäre der Null. (Für den Nutzer insofern sinnvoll indem er direkt für jeden Kunden sieht wann der letzte Auftrag gewesen ist, ohne den Wert doppelt in der DB zu speichern) Kann man sowas mit Mapping abbilden? Geschrieben würde das ganze ja über einen Auftrag werden.

Und nun die zweite Frage, die Hoffentlich etwas einfacher ist. Wie kann ich solche 1:n mappings machen. Als Beispiel Wie lege ich zu einen bestimmten kunden einen neuen Auftrag an. (Oder muss ich wirklich von Hand die Keys machen?) bzw wie lese ich einfach alle Aufträge zu einen bestimmten Kunden aus? Ich habe beispiele gefunden wie man diese Art des mappings in das mapping file eingibt, aber nicht wie man es konkret in java nutzt.


----------



## maki (26. Nov 2009)

> Nun könnte es aber ein Feld für Kunden (Letzter Auftrag am: ) geben der auf Grund der Beziehung den letzten Auftrag referenziert wird. Kurz gesagt. Es wäre eine art Read Only Wert der nur beim auslesen eines Kunden gelesen wird sofern ein (oder mehrere) Auftrag dazu existiert.


IMHO eine Frage des Designs, Möglcihkeiten Redundanz zu vermeiden gibt es viele, von den sog. "Temporalen Mustern" bis zu einer einfachen 1:N Beziehung zwischen Kunde und Auftrag, wenn der Kunde eine java.util.List mit Aufträgen hat, dann wäre doch einfach der letzte Auftrag in der Liste der gesuchte.


----------



## SegFault (26. Nov 2009)

gibts über die "Temporale Muster" mehr infos? Hab spontan nichts gefunden.

Bei der Sache mit der 1:N Beziehung stimmt das ganze schon. Jedoch will ich ja nicht unbedingt alle Aufträge beim Ansehen eines Kunden Laden, sondern nur wenn ich die Aufträge wirklich brauche. Ansonsten soll das Datum des letzten Auftrags nur als Hinweis für den Nutzer dienen ohne halt die Aufträge komplett aus der DB zu laden.

die Sache mit dem 1:N Beziehungen ist sowieso die Sache: "Wie mach ich das im Hibernate". Wie lade ich zu einen Kunden (den ich schon irgendwo als Instanz einer Klasse habe) alle Aufträge *bei Bedarf* nach. Oder kann ich das nur über den Fremdschlüssel und einer entsprechenden Abfrage machen? 
Kurz:

muss ich eine "Vector<Auftrag> getAufträge()" funktion innerhalb eines Kunden von hand schreiben oder gibts dafür was vorgefertigtes in Hibernate.

Umgedreht ists genau das gleiche. Wie speichere ich bei bedarf solche Aufträge.
Kurzum:
Ich habe in meinen Programm einen Kunden, lege zu diesem einen Auftrag an. Lösche ggf einen alten Auftrag. 
Muss ich nun händisch diese Aufträge schreiben und löschen.


----------



## maki (26. Nov 2009)

> gibts über die "Temporale Muster" mehr infos? Hab spontan nichts gefunden.


Vergiss das erstmal, war eigentlich als Negativ Beispiel gedacht.



> Bei der Sache mit der 1:N Beziehung stimmt das ganze schon. Jedoch will ich ja nicht unbedingt alle Aufträge beim Ansehen eines Kunden Laden, sondern nur wenn ich die Aufträge wirklich brauche. Ansonsten soll das Datum des letzten Auftrags nur als Hinweis für den Nutzer dienen ohne halt die Aufträge komplett aus der DB zu laden.
> 
> die Sache mit dem 1:N Beziehungen ist sowieso die Sache: "Wie mach ich das im Hibernate". Wie lade ich zu einen Kunden (den ich schon irgendwo als Instanz einer Klasse habe) alle Aufträge bei Bedarf nach. Oder kann ich das nur über den Fremdschlüssel und einer entsprechenden Abfrage machen?


Hibernate macht das autom. da Lazy-Load default ist für 1:1 oder 1:N.



> Kurz:
> 
> muss ich eine "Vector<Auftrag> getAufträge()" funktion innerhalb eines Kunden von hand schreiben oder gibts dafür was vorgefertigtes in Hibernate.
> 
> ...


Kurz:
Steht alles in der offiziellen Doku: HIBERNATE - Relational Persistence for Idiomatic Java
Da gibt es auch Beispiele, ansonsten ist das Inet voll von Hibernate/JPA Tutorials.


----------

