Objektidentität und Datenbankidentität

Status
Nicht offen für weitere Antworten.
N

Nathalie4784

Gast
Hallo

Ich arbeite zur Zeit allgemeine Unterschiede zwischen dem objektorientierten System und dem Datenbank System heraus und versuche gerade das Problem der Identität zu verstehen. Habe jedoch noch Verständnisfragen dazu. Wäre nett wenn mir jemand helfen würde.

In einer Datenbank wird die Identität einer Datenbankzeile mit Hilfe eines Primärschlüssels gekennzeichnet. Der Primärschlüssel darf hier nur eindeutige Werte besitzen und darf nicht null sein. Das ist soweit klar.

Bei Java-Objekten werden zwei Konzepte von Identität definiert. Einmal die Identität von Objekten und die Gleichheit.
Hier ein anschauliches Beispiel:

Code:
Point p = new Point (10,10);
Point q = new Point (10,10);
 
if (p == q)            // false, weil es verschiedene Objekte sind   --> Identität von Objekten
if (p.equals(q))      // true, weil der Inhalt gleich ist                  --> Gleichheit
So weit so gut. Anschliessend habe ich folgende Textpassage gefunden: :###

"Weder equals() noch == ist natürlich äquivalent mit dem Wert des Primärschlüssels. Es ist für mehrere nicht-identische Objekte üblich, simultan die gleiche Zeile der Datenbank zu repräsentieren, zum Beispiel in parallel ablaufenden Applikationthreads"

Ich verstehe jedoch nicht genau was damit gemeint ist. Wieso ist weder equals noch == natürlich äquivalent? Verstehe das Problem noch nicht so wirklich ???:L
Kann mir das jemand in "einfachen" Worten erklären? Ein Beispiel wäre super!

Vielen lieben Dank!
 

byte

Top Contributor
Für gewöhnlich prüft equals() die fachliche Gleichheit des Objekts, also beim Beispiel Point ob die Felder x und y gleich sind. In Datenbanken werden für gewöhnlich synthetische Primärschlüssel verwendet, also ein Wert der nichts mit der Fachlichkeit des Objekts zu tun hat. Da würde z.B. der Point ein zusätzliches Feld id als PK bekommen. Dieses Feld hat aber nichts mit dem eigentlichen Punkt zu tun.
 
G

Guest

Gast
Danke! Jetzt habe ich es auch endlich mal verstanden :)
Ist doch nicht so kompliziert wie ich dachte...
 
P

PeterMüller

Gast
"Weder equals() noch == ist natürlich äquivalent mit dem Wert des Primärschlüssels

Ich glaub du musst das so lesen:

Weder equals() noch == ist (natürlich äquivalent mit dem Wert des Primärschlüssels) anstatt
(Weder equals() noch == ist natürlich äquivalent) mit dem Wert des Primärschlüssels

Also der Primärschlüssel der Datenbank drückt etwas anderes aus als sowohl "equals()" als auch "=="
 
S

SlaterB

Gast
schlimmer ist ja der Satz
"Es ist für mehrere nicht-identische Objekte üblich, simultan die gleiche Zeile der Datenbank zu repräsentieren, zum Beispiel in parallel ablaufenden Applikationthreads"

wenn er sich nur auch == bezieht, dann ist er ziemlich trivial und dumm gesetzt an dieser Stelle,
wo es doch um den Unterschied zwischen equals und PK geht,

wenn er sich auf equals() bezieht, dann ist das recht verwunderlich,
dass ein DB-Objekt 'üblicherweise' überall derart verändert wurde, dass diese einzelnen Instanzen 'üblicherweise' nicht mehr equal() sind
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben