AceTheFace
Mitglied
Hallo,
ja der Betreff ist etwas seltsam formuliert, aber ich dachte lieber etwas verwirrend als nur "Hibernate-Problem" *g*
Aber zum eigentlich Problem:
Ich entwickle ja gerade ein pluginbasiertes Framework welches nach langem hin und her nun Hibernate als Persistenzlösung einsetzt. Mein Framework verwaltet die User und Gruppen mithilfe des folgenden Interfaces:
Dieses Interface wird nun von den Klassen User und Group implementiert, so dass ich das ganze schön rekursiv in einem Baum modellieren kann (Gruppe kann weitere Gruppe oder auch Gruppen und User auf der gleichen Ebene beinhalten => composite-pattern).
Gemappt habe ich das Interface wie folgt:
Das funktioniert auch hervorragend, d.h. ich kann bequem auf dem Interface arbeiten ohne mich konkret darum kümmern zu müssen ob ich es denn nun mit Usern oder Gruppen zu tun habe.
Das Problem ist nun, dass die Programmierer, die später das Framework benutzen sollen ja vielleicht mehr Informationen zu ihren Usern/Gruppen als nur einen Namen speichern wollen (bspw. email, adresse, geburstdatum etc...). Die müssten nun also direkt in die User/Group-Implementierung eingreifen innerhalb des Frameworks eingreifen. Das ist aber natürlich mehr als unschön.
Ist es denn möglich z.b. einfach eine Klasse MyUser innerhalb der Anwendung zu schreiben, die die Klasse User aus dem Portal erweitert und dort die weiteren Attribute unterzubringen? Wie müsste ich das denn dann mappen?
Über Tipps oder andere Vorschläge wäre ich dankbar.
Gruß,
Ace
ja der Betreff ist etwas seltsam formuliert, aber ich dachte lieber etwas verwirrend als nur "Hibernate-Problem" *g*
Aber zum eigentlich Problem:
Ich entwickle ja gerade ein pluginbasiertes Framework welches nach langem hin und her nun Hibernate als Persistenzlösung einsetzt. Mein Framework verwaltet die User und Gruppen mithilfe des folgenden Interfaces:
Java:
public interface Rights {
void addRights(Rights r);
Set<Rights> getRights();
void setRights(Set<Rights> rights);
void setId(Long id);
Long getId();
String getName();
void setName(String name);
void setParent(Rights parent);
Rights getParent();
}
Dieses Interface wird nun von den Klassen User und Group implementiert, so dass ich das ganze schön rekursiv in einem Baum modellieren kann (Gruppe kann weitere Gruppe oder auch Gruppen und User auf der gleichen Ebene beinhalten => composite-pattern).
Gemappt habe ich das Interface wie folgt:
XML:
<class name="Rights" table="RIGHTS">
<id name="id" type="long" unsaved-value="null">
<generator class="native"/>
</id>
<discriminator column="type" type="string" />
<set name="rights" inverse="true" lazy="true" cascade="all-delete-orphan">
<key column="parent"/>
<one-to-many class="Rights"/>
</set>
<many-to-one name="parent" column="parent" cascade="save-update" class="Rights"/>
<property name="name" type="string" />
<subclass name="User" discriminator-value="user">
</subclass>
<subclass name="Group" discriminator-value="group">
</subclass>
</class>
Das funktioniert auch hervorragend, d.h. ich kann bequem auf dem Interface arbeiten ohne mich konkret darum kümmern zu müssen ob ich es denn nun mit Usern oder Gruppen zu tun habe.
Das Problem ist nun, dass die Programmierer, die später das Framework benutzen sollen ja vielleicht mehr Informationen zu ihren Usern/Gruppen als nur einen Namen speichern wollen (bspw. email, adresse, geburstdatum etc...). Die müssten nun also direkt in die User/Group-Implementierung eingreifen innerhalb des Frameworks eingreifen. Das ist aber natürlich mehr als unschön.
Ist es denn möglich z.b. einfach eine Klasse MyUser innerhalb der Anwendung zu schreiben, die die Klasse User aus dem Portal erweitert und dort die weiteren Attribute unterzubringen? Wie müsste ich das denn dann mappen?
Über Tipps oder andere Vorschläge wäre ich dankbar.
Gruß,
Ace
Zuletzt bearbeitet von einem Moderator: