Hallo zusammen,
ich suche eine Lösung für folgendes Problem:
Ich habe eine Tabelle "Person". Diese Tabelle hat zB folgende Felder:
vorname
nachname
strasse
Diese Datenbankstruktur hat zum Beispiel unser Kunde "A" für den ich jetzt eine Schnittstelle programmiere die Personen importiert. Daher hätte ich jetzt folgende Klasse geschrieben:
In meiner Schnittstelle für Kunde "A" erzeuge ich dann eine neue Instanz
Soweit sogut.
Nun kommt Kunde "B" der eine neuere Datenbankversion (Schema) hat, wo zB noch das Feld
geburtstag
hinzugekommen ist. Dieser Kunde "B" möchte nun eine Schnittstelle haben, die die Personen exportiert. Daher habe ich gedacht ich könnte
verwenden aber das funktioniert so nicht.
In einem Forum habe ich gelesen das es @MappedSuperclass gibt und das ich eine Art Basisklasse erzeugen sollte.
und dann immer eine neue Klasse implementieren die diese Baseklasse erweitert. Aber auch das funktioniert nicht wirklich.
Zum Hintergrund:
Leider können wir in der Firma nicht davon ausgehen das alle unsere Kunden das gleiche DB Schema haben. Selbst wenn ich eine neue Version von einer Schnittstelle bei einem Kunden einspiele kann es sein, dass das DB Schema noch in einer älteren Version vorhanden ist. Ich kann auch nicht einfach die neuen Felder hinzufügen, da sonst die Oberfläche verrückt spielt.
Vorher haben wir das so gelöst, dass wir verschiedene Mappings (*.hbm.xml) Dateien hatten und dann das jeweilige Mapping in der hibernate.cfg.xml eingetragen haben. Da wir nun aber auf einen Application Server umsteigen und mit EJBs arbeiten möchten, wollen wir von diesen Mappings weg die immer viel Arbeit gemacht haben.
Hat jemand eine gute Idee wie man sowas geschickt lösen kann?
Vielen dank für die Hilfe und einen schönen Abend noch,
Hauke
ich suche eine Lösung für folgendes Problem:
Ich habe eine Tabelle "Person". Diese Tabelle hat zB folgende Felder:
vorname
nachname
strasse
Diese Datenbankstruktur hat zum Beispiel unser Kunde "A" für den ich jetzt eine Schnittstelle programmiere die Personen importiert. Daher hätte ich jetzt folgende Klasse geschrieben:
Java:
@Entity
@Table (name = "person")
public class Person {
private String vorname;
private String nachname;
private String strasse;
// getter und setter
}
In meiner Schnittstelle für Kunde "A" erzeuge ich dann eine neue Instanz
Java:
Person person = new Person();
Soweit sogut.
Nun kommt Kunde "B" der eine neuere Datenbankversion (Schema) hat, wo zB noch das Feld
geburtstag
hinzugekommen ist. Dieser Kunde "B" möchte nun eine Schnittstelle haben, die die Personen exportiert. Daher habe ich gedacht ich könnte
Java:
public class Person2 extends Person {
private Date geburtstag;
// getter und setter
}
verwenden aber das funktioniert so nicht.
In einem Forum habe ich gelesen das es @MappedSuperclass gibt und das ich eine Art Basisklasse erzeugen sollte.
Java:
@MappedSuperclass
public abstract class PersonBase {
private String vorname;
private String nachname;
private String strasse;
}
und dann immer eine neue Klasse implementieren die diese Baseklasse erweitert. Aber auch das funktioniert nicht wirklich.
Zum Hintergrund:
Leider können wir in der Firma nicht davon ausgehen das alle unsere Kunden das gleiche DB Schema haben. Selbst wenn ich eine neue Version von einer Schnittstelle bei einem Kunden einspiele kann es sein, dass das DB Schema noch in einer älteren Version vorhanden ist. Ich kann auch nicht einfach die neuen Felder hinzufügen, da sonst die Oberfläche verrückt spielt.
Vorher haben wir das so gelöst, dass wir verschiedene Mappings (*.hbm.xml) Dateien hatten und dann das jeweilige Mapping in der hibernate.cfg.xml eingetragen haben. Da wir nun aber auf einen Application Server umsteigen und mit EJBs arbeiten möchten, wollen wir von diesen Mappings weg die immer viel Arbeit gemacht haben.
Hat jemand eine gute Idee wie man sowas geschickt lösen kann?
Vielen dank für die Hilfe und einen schönen Abend noch,
Hauke