Hallo ihr Wissenden ;-),
ich bin Student und befasse mich seit etwas mehr als einem Monat mit Java. Also ich bezeichne mich selber mal als Newbee, auch wenn ich schon Erfahrung mit C# und PHP habe.
Nun wir müssen einen Online-Shop mit Hilfe von Java realisieren und sollen dafür den Anwendungskern entwickeln. Also GUIs sind nicht von Bedeutung. Damit der Kern frei von SQL-Statements ist, wird JPA mit EJB 3 eingesetzt.
Sollten hier schon Fehler bei der Beschreibung sein, bin ich euch nicht böse, wenn ihr da vielleicht etwas zur Lückenschließung beitragen könntet. Ich bin ja lernfähig. :-)
Nun aber zum Problem. Das Datenbankdesign ist entwickelt worden und steht. Die Verbindung zur Datenbank (PostgreSQL) ist im Eclipse konfiguriert und funktioniert auch. Auch sind schon Dummy-Daten in der DB eingepflegt.
Nun müssen meine Objekte, die ich im Programm verwenden will mit der DB verknüpft werden und dabei komme ich nicht um eine Vererbung herum.
Das sieht von der Objektseite so aus:
Ich habe also eine zweifache Vererbung aufgebaut. Diese funktioniert auch von der Objektseite aus. Also je tiefer die Vererbung reicht, desto mehr Attribute hat das Objekt.
Jetzt wird es aber haarig. In der DB habe ich eine zentrale Tabelle "Benutzer" in der für alle Objekte die Basisdaten bereitgehalten werden. Einzig das Objekt Gast unterscheidet sich von den Attributen nicht von UnknownUser. Der Benutzer erweitert den UnknownUser um Attribute, die in der Tabelle Benutzer stehen, die aber von UnknownUser nicht zur Verfügung gestellt werden sollen, weil Gast diese nicht erben soll. Die von Benutzer abgeleiteten Klassen Lieferant und Mitarbeiter haben eigene zusätzliche Tabellen aus denen die Attribute ausgelesen werden. Ansonsten ist in der Tabelle Benutzer eine Spalte Rolle, durch die die Objekte klassifiziert werden.
Die Klassifizierung kann mittels @Inheritance und @DiscriminatorValue erfolgen, aber funktioniert scheinbar nicht so ganz. So wie ich das sehe müsste ich bei meiner Vererbung 2 Inheritance-Typen benutzen, einmal SINGLE_TABLE und zum anderen JOINED verwenden, aber ich komme damit momentan einfach nicht klar. Kann mir vielleicht jemand einen Denkanstoss geben?
Vielen, vielen Dank
Stefan
ich bin Student und befasse mich seit etwas mehr als einem Monat mit Java. Also ich bezeichne mich selber mal als Newbee, auch wenn ich schon Erfahrung mit C# und PHP habe.
Nun wir müssen einen Online-Shop mit Hilfe von Java realisieren und sollen dafür den Anwendungskern entwickeln. Also GUIs sind nicht von Bedeutung. Damit der Kern frei von SQL-Statements ist, wird JPA mit EJB 3 eingesetzt.
Sollten hier schon Fehler bei der Beschreibung sein, bin ich euch nicht böse, wenn ihr da vielleicht etwas zur Lückenschließung beitragen könntet. Ich bin ja lernfähig. :-)
Nun aber zum Problem. Das Datenbankdesign ist entwickelt worden und steht. Die Verbindung zur Datenbank (PostgreSQL) ist im Eclipse konfiguriert und funktioniert auch. Auch sind schon Dummy-Daten in der DB eingepflegt.
Nun müssen meine Objekte, die ich im Programm verwenden will mit der DB verknüpft werden und dabei komme ich nicht um eine Vererbung herum.
Das sieht von der Objektseite so aus:
Code:
abstract class UnknownUser implements java.io.Serializable { .. } // von dieser Klasse sollen keine Objekte erstellt werden public class Gast extends UnknownUser implements Serializable { .. } // Objektklasse für Benutzer ohne Registrierung -> minimale Rechte abstract class Benutzer extends UnknownUser implements Serializable { .. } // von dieser Klasse sollen keine Objekte erstellt werden public class Kunde extends Benutzer implements Serializable { .. } public class Mitarbeiter extends Benutzer implements Serializable { .. } public class Lieferant extends Benutzer implements Serializable { .. } public class Admin extends Benutzer implements Serializable { .. }
Jetzt wird es aber haarig. In der DB habe ich eine zentrale Tabelle "Benutzer" in der für alle Objekte die Basisdaten bereitgehalten werden. Einzig das Objekt Gast unterscheidet sich von den Attributen nicht von UnknownUser. Der Benutzer erweitert den UnknownUser um Attribute, die in der Tabelle Benutzer stehen, die aber von UnknownUser nicht zur Verfügung gestellt werden sollen, weil Gast diese nicht erben soll. Die von Benutzer abgeleiteten Klassen Lieferant und Mitarbeiter haben eigene zusätzliche Tabellen aus denen die Attribute ausgelesen werden. Ansonsten ist in der Tabelle Benutzer eine Spalte Rolle, durch die die Objekte klassifiziert werden.
Die Klassifizierung kann mittels @Inheritance und @DiscriminatorValue erfolgen, aber funktioniert scheinbar nicht so ganz. So wie ich das sehe müsste ich bei meiner Vererbung 2 Inheritance-Typen benutzen, einmal SINGLE_TABLE und zum anderen JOINED verwenden, aber ich komme damit momentan einfach nicht klar. Kann mir vielleicht jemand einen Denkanstoss geben?
Vielen, vielen Dank
Stefan
Comment