MichiLee: Seriazible

Beitrag lesen

Hi mrjerk,

nochmals vielen vielen Dank für die sehr nette und ausführliche Antwort.

Das Problem ist, dass sich Objektorientierung und relationale Datenbanken eigentlich nicht wirklich gut vertragen:

Nehmen wir an, Du hast eine Tabelle LOGGED_USERS, die alle eingeloggten User speichert und eine Tabelle USER_DETAILS, die zu jedem Benutzer die Details beinhaltet. Du hast eine Methode "getLoggedInUsers" die die LOGGED_USERS-Tabelle ausliest und daraus eine Liste aus "User"-Objekten erzeugt, und eine Methode "fetchUserDetails()", welche das User-Objekt mit den User-Details befüllt.
Jetzt möchtest Du (schön objektorientiert) eine Liste aller eingeloggten User mit ein paar Daten aus der Details-Tabelle (vielleicht Vor- und Nachname) anzeigen:

Iterator<User> users = UserListController.getLoggedInUsers().iterator();

while (users.hasNext()) {
   User user = users.next();
   user.fetchUserDetails();
   System.out.println(user.getVorname()+" "+user.getNachname());
}

Ja doof. Jetzt wird in der Schleife für JEDEN Benutzer ein DB-Request gemacht.
Also die User-Details-Tabelle vielleicht lieber in der getLoggedInUsers()-Methode auslesen, in dem man sie mit der LOGGED_USERS-tabelle joint (und sich dann die fetchUserDetails-Methode sparen)?
Könnte man machen, aber was, wenn man dann die Details gar nicht braucht, dann hätte man umsonst Performance für einen JOIN verbraten....

=> Wie mans macht ists Mist. "Object Relational Impedance mismatch" eben

In Hibernate muss ich mich zwingend einlesen die nächsten Wochen.
In dem oberen Beispiel wäre es aber womöglich besser, einmal ein JOIN zu nutzen, anstatt für alle User extra nochmals ein Request zu tätigen. (Denke ich mal)
Für sowas braucht man man sicherlich auch viel Erfahrung und das kleine Geschick, welches ich überhaupt nicht habe :-)

Grüße