[Hibernate] Speichern von ManyToOne-Beziehungen in der DB

Status
Nicht offen für weitere Antworten.

Mean

Aktives Mitglied
Hallo,

ich habe ein kleines Projekt und dabei will ich nun Fussballvereine und deren Spieler abspeichern können.

Klar ist, daß ein Fussballverein immer viele Spieler hat und ein Spieler (aktuell) immer nur einen Verein.

Wenn ich nun einen neuen Verein anlege der neben einer Liste von Spielern hat und den Verein dann in die Datenbank eintrage wird die Liste der Spieler nicht automatisch eingetragen (für den Anfang wollte ich es gerne so machen, daß jeder Spieler theoretisch nie den Verein wechselt, also immer erst dann in der Datenbank erscheint, wenn ein neuer Verein angelegt wird).

Kann ich das irgendwie automatisieren oder muß ich dafür eine eigene Methode schreiben, die mir die Liste Datensatz für Datensatz ausliest und sie dann in die Datenbank schreibt (so in der Art habe ich es bereits versucht, allerdings gab es dann Fehler - k.A., ob es an der Methode oder an meiner Denkweise lag).

Ich hoffe, ihr habt verstanden, was ich meine.

Vielen Dank, ein schönes Wochenende und Grüße,

Dirk
 

daNny

Aktives Mitglied
Wenn du jetzt eine Entity "Verein" hast, und du dort die Spieler, sagen wir mal in einer Set, gespeichert hast, dann sollte beim Mapping eigentlich folgendes klappen:

Code:
<set name="spieler" inverse="true" cascade="save-update">
    <key column="verein_id"/>
    <one-to-many class="Spieler"/>
</set>

Das cascade="save-update" sollte dafür sorgen, dass wenn du den Verein, der die Spieler in der Set beinhaltet, persistent machst, dass die Spieler dann automatisch hinzugefügt werden.

Desweiteren solltest du deiner Verein-Entity noch eine Convenience-Methode spendieren, sodass du auch ne bidirektionale Assoziation bekommst. Da ich auch noch Hibernate-Neuling bin, weiß ich nicht genau, ob das jetzt so wild für das Problem ist. Kann sein, dass der Spieler auch zwingend seinen Verein als Attribut besitzen muss.

Mit der Methode meine ich sowas hier:
Code:
public void addSpieler(Spieler spieler) {
    spieler.setVerein(this);
    spielerSet.add(spieler);
}

Hoffe, ich konnte dir ein wenig helfen ;) Falls ich Blödsinn erzähle, sollte das bitte ein Hibernate-Erfahrener korrigieren.
 

Mean

Aktives Mitglied
Hallo daNy,

erstmal vielen Dank für deine Antwort!

daNny hat gesagt.:
Wenn du jetzt eine Entity "Verein" hast, und du dort die Spieler, sagen wir mal in einer Set, gespeichert hast, dann sollte beim Mapping eigentlich folgendes klappen:

Code:
<set name="spieler" inverse="true" cascade="save-update">
    <key column="verein_id"/>
    <one-to-many class="Spieler"/>
</set>

Das cascade="save-update" sollte dafür sorgen, dass wenn du den Verein, der die Spieler in der Set beinhaltet, persistent machst, dass die Spieler dann automatisch hinzugefügt werden.

Sorry, da ich aber scheinbar ein noch größerer Hibernate-Neuling bin als du, würde ich gerne wissen, ob das wirklich als XML angegeben sein muß, oder ob du das so gemacht hast, damit du keinen echten Code posten mußt!?!?

Also, daß ich dann so etwas habe:

Code:
	@OneToMany(mappedBy="verein", fetch=EAGER, cascade={SAVE_UPDATE}, inverse=true)
	@OrderBy("id ASC")
	private List<Spieler> spieler;

daNny hat gesagt.:
Hoffe, ich konnte dir ein wenig helfen ;) Falls ich Blödsinn erzähle, sollte das bitte ein Hibernate-Erfahrener korrigieren.

Ja, vielen Dank auf jeden Fall mal - ich hoffe halt, daß ich es richtig verstanden habe ;)

Veilen Dank und Grüße,

Dirk
 

daNny

Aktives Mitglied
Ich habs in XML geschrieben, weil man mit Hibernate auch mit XML-Mapping-Files arbeiten kann. Die von dir Benutzen Annotations siind die neuere Variante, die es seit dem JDK 5 gibt und sich nach dem JPA-Standard richten. Also ist das vollkommen in Ordnung, bzw. sogar die bessere Wahl von dir ;) Habe mich nur noch nicht so recht mit den Annotations befasst.
Funktioniert es denn?
 

Mean

Aktives Mitglied
Hi daNy,

achso, ok. Das mit dem XML wußte ich nicht - kannte nur die neueren ein wenig (durchs Studium).

Im Moment bekomme ich leider immer eine Null-Pointer-Exception beim Ausführen meiner JUnit-Tests. Ich habe die "neue" Annotation noch nicht eingebaut, weil ich diese Exception jetzt erstmal wieder rausbekommen will - k.A., woran das im Moment genau liegt...

Werde mich melden, sobald ich es getestet habe.

Danke nochmals und Grüße,

Dirk
 

Mean

Aktives Mitglied
Hi (daNny),

ich habe jetzt mal mit SAVE_UPDATE versucht das ganze zu lösen. Problem ist hierbei zum einen nur, daß ich das Paket nicht finde, in dem das cascade.SAVE_UPDATE befindet, außerdem ist dies ja eine reine Hibernate-Implementierung, nicht aber in der JPA-Spezifikation enthalten, weshalb ich lieber eine allgemeine JPA-Lösung suche.

Wie gehe ich denn in meinem Beispiel vor? Rufe ich dann bei der Verein-Abspeicherungs-Methode heraus (nachdem der Verein gespeichert wurde) dann eine Spieler-Abspeicherungs-Methode auf, die die List<> durchläuft und nach und nach jeden Spieler abspeichert?

Oder gibt es einen anderen cascade, der mir das abnimmt und der JPA-Spezifikation entspricht?

Danke und Grüße,

Dirk
 

daNny

Aktives Mitglied
Hi Mean!

Was spricht denn gegen die Hibernate-Implementierung? Zumal du doch scheinbar eh darauf aufbaust. Hast du vor, dein ORM irgendwann einmal auszutauschen?

Für die Annotations gibts ein eigenes Packet von Hibernate, es ist also nicht im Core enthalten. Finden tust du das ganze hier: http://www.hibernate.org/397.html
 

Mean

Aktives Mitglied
Hallo byto,

ja, die kenne ich bereits: Persist, Remove, Merge und Refresh, wobei ich die ersten beiden verstehe, was aber genau bei Merge bzw. Refresh gemacht wird (Übersetzung ins Deutsche ist mir klar), verstehe ich nicht so wirklich bzw. kann ich mir nicht so wirklich vorstellen...

Ich habe jetzt mal testhalber REFRESH und MERGE eingefügt, aber da hat es nicht geklappt. Gehen tut es nur mit ALL, wobei ich dachte, daß das lediglich die 4 o.g. CascadeTypes wären. Durch Persist oder Remove wird ja keine Tabelle mit frischen werten gefüttert/upgedatet, warum klappt es also mit REFRESH oder MERGE nicht!?!?

Danke und Grüße,

Dirk
 

byte

Top Contributor
RTFM. :roll:
Wie willst Du mit Hibernate fit werden, ohne mal einen Blick in die Hibernate Doku zu werfen? Dort findest Du auch Informationen darüber, was es mit der Kaskadierung auf sich hat.
Um es kurz zusammen zu fassen: Die einzelnen CascadeTypes beziehen sich auf die gleichnamigen Methoden aus der Session und bedeuten, dass der jeweilige Methodenaufruf auch an das assoziierte Objekt delegiert wird oder eben nicht.

Zu Deinem Problem: Guck Dir die Enum nochmal genauer an. Es gibt mehr Kaskadierungstypen als Du da aufgezählt hast, u.a. SAVE_UPDATE.
 

Mean

Aktives Mitglied
Hallo byto,

danke für die Antwort! Das Problem ist ja, daß ich nur die verwenden möchte, die es in der Java-Persistence-Spezifikation gibt - vielleicht war's deshalb falsch ausgedrückt...

Ich stehe dabei auch etwas unter Zeitdruck (ist eine Projektarbeit für die Uni wobei dabei demnächst Abgabe ist). Die Doku habe ich mir, am Anfang, zwar durchgelesen, aber wirklich alles zu 100% verstanden habe ich nicht (deshalb auch meine Einträge), zumal das mein erstes Mal mit Hibernate/Obj.rel. DBs ist.

So viel wie möglich versuche ich mir zwar durchzulesen, aber wenn dann doch was nicht klappt oder ich es nicht verstehe, dann muß ich halt in die Foren und da hoffen, daß es mir jemand erklärt oder sagt, wie es geht ;)

Danke und Grüße,

Dirk
 

byte

Top Contributor
CascadeType.PERSIST ist das, was Du suchst. Wenn Du weisst, was Du tust, kannst Du auch einfach CascadeType.ALL benutzen. Wenn Du Dir unsicher bist, benutze einfach {CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.MERGE} damit Du nicht versehentlich zuviele Daten löscht.
 

Mean

Aktives Mitglied
Hallo byto,

oh, ok. Da muß ich mir echt nochmal die ganzen Namen genauer anschauen. PERSIST hatte meiner Meinung nach nämlich eine andere Bedeutung, aber da es funktioniert bin ich doch schon seeeehr ins Zweifeln gekommen. ;)

Vielen Dank und Grüße,

Dirk
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Todesbote Int Array mit Hibernate in Datenbank speichern. Java Basics - Anfänger-Themen 2
I Element n aus Datenbank Query (JPA / Hibernate) Java Basics - Anfänger-Themen 3
I JPA / Hibernate "Predicate" kombinieren in der gleichen Query Java Basics - Anfänger-Themen 1
I BLOB / CLOB und Hibernate... Ratschläge benötigt Java Basics - Anfänger-Themen 10
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
D hibernate annotation Java Basics - Anfänger-Themen 2
D hibernate: string vs setparameter Java Basics - Anfänger-Themen 1
V kennt jemand empfehlenswerte online tutorials zur Hibernate ? gerne auch englisch. Java Basics - Anfänger-Themen 4
DStrohma Best Practice Hibernate für kleine Anwendung nutzen? Java Basics - Anfänger-Themen 4
I Hibernate Java Basics - Anfänger-Themen 4
T Hibernate Fehlermeldung Java Basics - Anfänger-Themen 9
D [Hibernate] Objektinhalte auslesen Java Basics - Anfänger-Themen 8
N Hibernate "Hello World" Tutorial gesucht Java Basics - Anfänger-Themen 9
F Logging von Hibernate-Statements und Glassfish Java Basics - Anfänger-Themen 2
G Maps und Hibernate - Performancefrage Java Basics - Anfänger-Themen 2
G hibernate . tutorial prob . Java Basics - Anfänger-Themen 4
G org.hibernate.MappingException:An AnnotationConfiguration. Java Basics - Anfänger-Themen 3
G [Hibernate] Node to traverse cannot be null Java Basics - Anfänger-Themen 3
G java.lang.IllegalArgumentException -> Hibernate Java Basics - Anfänger-Themen 2
G Hibernate, JDO und Alternativen Java Basics - Anfänger-Themen 4
G [Hibernate] Richtiger ColumnType Java Basics - Anfänger-Themen 2
G [Hibernate] Aus SQL-Statement Entities erzeugen Java Basics - Anfänger-Themen 2
G [Hibernate] Constraints über mehrere Tabellen Java Basics - Anfänger-Themen 2
G [Hibernate] Could not find a setter for property Java Basics - Anfänger-Themen 2
M [Hibernate] "Illegal start of expression"-Fehler b Java Basics - Anfänger-Themen 2
B Hibernate - DB2 - Java Java Basics - Anfänger-Themen 3
M [Hibernate]: Cascade-Frage Java Basics - Anfänger-Themen 4
S Hibernate Session: Wie in alle Klassen Java Basics - Anfänger-Themen 19
G JTable aus Hibernate Zeile löschen Java Basics - Anfänger-Themen 4
H [Hibernate] HibernateSessionFactory Pfad setzen Java Basics - Anfänger-Themen 4
G [Hibernate] Dynamischer Datenbankpfad Java Basics - Anfänger-Themen 4
G [Hibernate] Laden aus DB funktioniert nicht Java Basics - Anfänger-Themen 8
G [Hibernate] Beschränkte Selektion Java Basics - Anfänger-Themen 2
G [Hibernate] StaleStateException beim Löschen Java Basics - Anfänger-Themen 3
G Einfacher Anfang mit Hibernate Java Basics - Anfänger-Themen 4
F [Hibernate] Debug INFO Einstellungen Java Basics - Anfänger-Themen 5
F [Hibernate] Alle Objekte laden aus der DB laden Java Basics - Anfänger-Themen 6
F [Hibernate] Id aus DB auslesen Java Basics - Anfänger-Themen 5
C Hibernate und Mandantenfähigkeit Java Basics - Anfänger-Themen 7
G hibernate tutorial Java Basics - Anfänger-Themen 3
R Verständnisproblem mit Hibernate Java Basics - Anfänger-Themen 2
N Hibernate will nicht so wie ich Java Basics - Anfänger-Themen 4
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
I Passwort in Datenbank speichern um später wieder auszulesen Java Basics - Anfänger-Themen 5
S mehrere TreeSets so speichern, dass man sie miteinander vergleichen kann Java Basics - Anfänger-Themen 1
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
berserkerdq2 Wie datum im default format speichern? Java Basics - Anfänger-Themen 5
M Objekt in einem Objekt speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
f3mys Objektwerte in Liste speichern und wieder abrufen Java Basics - Anfänger-Themen 23
I Liste von Infos von einer eigenen Annotation in Liste speichern Java Basics - Anfänger-Themen 0
U Wie ein Attribut von einer Klassenmethode in der Klasse speichern= Java Basics - Anfänger-Themen 2
B Screenshots machen und zwar viele und speichern Java Basics - Anfänger-Themen 12
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
Marlena Bauer Konsolenausgabe in .txt speichern Java Basics - Anfänger-Themen 6
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
ansystin Teilerfremde Zahlen ausgeben + Zahlenausgabe speichern Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
C File speichern Java Basics - Anfänger-Themen 5
D String und char in String speichern Java Basics - Anfänger-Themen 5
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
GermanPie Nachrichten Speichern Java Basics - Anfänger-Themen 2
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
C Wo Defaultpfad speichern? Java Basics - Anfänger-Themen 2
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
Dimax stream in string[] speichern Java Basics - Anfänger-Themen 6
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
I ArrayList - Methode zum Speichern eines Eintrags in einer Datei Java Basics - Anfänger-Themen 17
H Objekt im Array speichern Java Basics - Anfänger-Themen 2
H Objekt als Attribut speichern Java Basics - Anfänger-Themen 11
B Text-Datei nur in Stream speichern und dann ausgeben Java Basics - Anfänger-Themen 3
M JTextField in ArrayList speichern Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben