EJB Postgres

LarsK

Grünschnabel
Hallo ich habe eine kleine Frage vielleicht kann mir ja jemand sagen ob das was ich vorhabe Funktioniert oder nicht.

Kleine Schilderung der Sachlage: Ich habe drei Tabellen einmal "Einträge", "Kategorien", "die Verknüpfung". Ein Eintrag aus der ersten Tabelle kann mehreren Kategorien zugeordnet werden, was in der verknüpfungstabelle gespeichert ist.

Nun meine Frage wenn ich jetzt ein SELECT auf die Einträge mache, dann bekomme ich ja ein LocalObject der Einträge zurückgegeben, das ist soweit klar und auch gut. Über ein JOIN kann ich ja nun mir die Einträge und die dazugehörigen Kategorien anzeigen lassen. Problem dabei ist, dass das Object keine getter und setter Funktionen für die dazugeholten Felder besitzt, sodass ich die Daten nicht auslesen kann.

Eine Möglichkeit wäre jetzt ich hole mir die Einträge aus der Datenbank anschließen die dazugehörigen Kategorien und bastel daraus ein neues Objekt welches, alle benötigen Daten besitzt. Das gefällt mir aber nicht wirklich gut, da ich ja fast identische Objekte erzeuge und alle Daten mittels get und set übernehmen muss. Das kostet irgendwie Performance, da ich jedes Objekt umschreiben muss.

Schöner wäre es, wenn ich das gleich in das LocalObjekt mit einbauen könnte, sodass wenn ich auf das Datenbankobjekt zugreife, gleich ein Feld habe getKategorie und mir die Datenbank die Einträge liefert.
Ich hab da irgendwie an eine selbstdefinierte Funktion auf der Datenbank, die dann mit einen Feld aus der Tabelle verknüpft ist, durch eine Abfrage des Feldes aufgerufen wird und das Ergebnis zurückliefert.

Gruß

Lars
 
Hi Lars,

das was du an dieser Stelle brauchst sind Container Managed Relationships (CMR).
Diese definierst du im Deploment-Descriptor. Sie definieren die Beziehung und die Kardinalität zwischen deinen beiden Tabellen. Um deine Verknüfpungstabelle musst du dich dann "von Hand" gar nicht kümmern, da du die Kategorien direkt über die Einträge hinzufügen kannst. Außerem musst du deiner Bean Einträge eine Collection Kategorien hinzufügen.

public abstract Collection getKategorien();
public abstract void setKategorien(Collection kategorien);

Näheres siehe
http://java.sun.com/developer/technicalArticles/ebeans/EJB20CMP/
http://www.javaworld.com/javaworld/jw-04-2002/jw-0419-cmp.html

Wenn du die JBossIDE benutzt, gibt es dazu auch nen Wizard.

Gruß
MadM
 
Zuletzt bearbeitet:
Hallo,

danke für den Anstoss. Ich hatte schon CMR im Einsatz, allerdings nur als 1:n also als FK. Wusste nicht, das man die auch als m:n einsetzen kann. Naja ist ja auch noch recht Neuland für mich.
Jetzt muss ich da nur noch irgendwie was mit den Transaction machen, wenn ich nämlich auf die Collection zugreife bekomme ich die Meldung "A CMR Collection may only be used within the transaction in which it was created".

Gruß

Lars
 

Neue Beiträge

Zurück