# nur bestimmte Mapping-Dateien berücksichtigen (Hibernate)



## jk84 (26. Jul 2007)

Hallo Zusammen,

bin neu in der Hibernate Welt, also entschuldigt meine vielleicht schlechte Ausdrucksweise.

Ich hab hier eine relativ große Datenbank vorliegen die aus Hibernate mapping xml Dateinen generiert wird. Es sind 85 Tabellen also auch 85 XML Mappings. Diese 85 Mapping Dateien werden beim Start des Mappings alle gerücksichtigt. 
Jetzt sollen aber für ein Update der Datenbank *nur einige* der Tabellen neu erzeugt werden. Habt ihr ne Idee für mich wie ich das am besten programmatisch lösen kann. Gibt es in Hibernate Funktionen oder sonstiges für so was?

Vielen Dank

Gruß jk84


----------



## SlaterB (26. Jul 2007)

deine Betonung auf 'nur einige' verwirrt etwas, da 'Tabellen neu erzeugen' für sich schon verrückt genug ist

was passiert da? was hat das mit Hibernate zu tun, außer das man die Mappings und Persitenzklassen hoffentlich genauso anpasst,
was hat das mit der Anzahl der Tabellen zu tun?
was soll diese Funktion leisten?


----------



## jk84 (27. Jul 2007)

Die Sache ist die. 
Wenn sich was an einer der 85 Tabellen in der Datenbank ändert, (z.B. Attribut weg oder neues hinzu) wird diese Änderungen immer in der entsprechenden Hibernate Mapping XML vorgenommen. Alle Hibernate XMLs haben immer die aktuellste Struktur. Ab einer gewissen Anzahl von Änderungen sollen diese dann auf die Datenbank überspielt (per mapping) werden. 
Dazu werden alle Tabellen *die sich geändert haben* in der DB umbenannt. Dann sollen *nur *die Tabellen durch mapping neu erzeugt werden die auch geändert wurden. Und das ist genau das Problem. Wie sage ich Hibernate, dass er nur die Tabellen neu erzeugt an denen Änderungen vorgenommen wurden?
Es gibt eine Liste von den Tabellen die geändert wurden. Diese Liste müsste Hibernate dann verarbeiten.

Danke für deine Hilfe

Gruß jk84


----------



## SlaterB (27. Jul 2007)

nun ja, ich kann nicht helfen,
dass irgendjemand anders als ein eigenes SQL-Statement Tabellen ändert oder erzeugt ist mir neu,

kommt das so häufig vor, dass man das automatisieren muss?..
selbst wenn, dann vielleicht nur die SQL-Code-Generierung,
ausführen sollte man das doch selber, dann kannst du die Tabellen, die du nicht magst, aussortieren


----------



## DaKo (27. Jul 2007)

jk84 hat gesagt.:
			
		

> Ab einer gewissen Anzahl von Änderungen sollen diese dann auf die Datenbank überspielt (per mapping) werden.



Warum erst dann? Warum nicht einfach nach dem Ändern der Mappings? Hibernate passt die DB dann von ganz alleine an (wenn so konfiguriert  )


----------



## jk84 (27. Jul 2007)

Ich kann dir leider nicht ganz folgen???:L 
Aber es muss automatisiert werden ja. Der Ablauf des Programms sollte schon wie oben von mir beschrieben vonstatten gehen. 
Es geht nur darum Hibernate nicht alle 85 XML Dateien bekannt zu machen oder nur eine Liste von z.B. 10 die sich geändert haben.


----------



## jk84 (27. Jul 2007)

DaKo hat gesagt.:
			
		

> jk84 hat gesagt.:
> 
> 
> 
> ...



So weit mir bekannt ist kann Hibernate aber keine Löschvorgänge von Attributen ausführen. 
Zudem gibt es auch noch kompliziertere Änderungsvorgänge bei denen neue Tabellen erstellt und diese mit Werten aus verschiedenen anderen gefüllt werden müssen.


----------



## DaKo (27. Jul 2007)

jk84 hat gesagt.:
			
		

> So weit mir bekannt ist kann Hibernate aber keine Löschvorgänge von Attributen ausführen.



und? Wo liegt jetzt das Problem? Wenn in der DB nicht verwendete Spalten sind, stört das jemanden?



			
				jk84 hat gesagt.:
			
		

> Zudem gibt es auch noch kompliziertere Änderungsvorgänge bei denen neue Tabellen erstellt und diese mit Werten aus verschiedenen anderen gefüllt werden müssen.



neue Tabellen legt Hibernate an und diese mit Daten zu füllen bekommst du mit Sicherheit hin (ist nicht böse gemeint).
Für sowas habe ich immer ein DBInit-Klasse, die mir die einzelnen Tabellen mit werten füllt.


----------



## jk84 (27. Jul 2007)

DaKo hat gesagt.:
			
		

> jk84 hat gesagt.:
> 
> 
> 
> ...


----------



## DaKo (27. Jul 2007)

Wenn es die Tabellen 1, 3, 4 und 6-44 schon gibt, werden diese auch nicht neu angelegt


----------



## jk84 (27. Jul 2007)

DaKo hat gesagt.:
			
		

> Wenn es die Tabellen 1, 3, 4 und 6-44 schon gibt, werden diese auch nicht neu angelegt



Jo, das stimmt. An die Lösung hab ich auch schon gedacht. Das sollte gehen meinst du? 
Aber für meinen Chef wäre es für spätere Änderungen auch interessant ob die Möglichkeit besteht einzelne Tabellen neu zu generieren. Auch um sich Optionen offen zu halen bei der Entwicklung des Programms.


----------



## DaKo (27. Jul 2007)

Einzelne Tabellen können doch mittels eines einfach "Drop"-Statements gelöscht werden und beim starten legt Hibernate diese dann wieder an


----------



## jk84 (27. Jul 2007)

DaKo hat gesagt.:
			
		

> Einzelne Tabellen können doch mittels eines einfach "Drop"-Statements gelöscht werden und beim starten legt Hibernate diese dann wieder an



Klar, dann sind aber auch die Daten aus der gelöschten Tabelle weg  :wink: 
Das soll natürlich nicht sein.
Ich sehe dabei aber noch ein anderes Problem und zwar, werden noch vor dem umbennenen alle FK Constraints aus der DB gelöscht. wenn ich dann nach dem umbenennen das mapping über alle Tabellen laufen lasse, werden diese wieder mit angelegt (für alle Tabellen). Zusätzlich werden auch die neunen Tabellen erzeugt die dann aber leer sind. 
=> es gibt dann Tabellen in der DB die einen FK auf eine leere Tabelle haben. geht das?? ???:L


----------



## DaKo (27. Jul 2007)

jk84 hat gesagt.:
			
		

> Klar, dann sind aber auch die Daten aus der gelöschten Tabelle weg icon_wink.gif
> Das soll natürlich nicht sein.



Warum sollen die Tabellen dann gelöscht werden?



			
				jk84 hat gesagt.:
			
		

> es gibt dann Tabellen in der DB die einen FK auf eine leere Tabelle haben. geht das??



keine Ahnung. Bin nie in die Verlegenheit gekommen.
=> ausprobieren


----------



## jk84 (27. Jul 2007)

DaKo hat gesagt.:
			
		

> jk84 hat gesagt.:
> 
> 
> 
> ...



Sie wird ja nicht direkt gelöscht, sondern nur es werden nur Attribute geändert, oder Attribute in neue Tabellen ausgelagerd. Natürlich müssen die Werte dabei erhalten bleiben.


----------

