Frage zum Umgang mit DB-Daten

Status
Nicht offen für weitere Antworten.

WeirdAl

Bekanntes Mitglied
Huhu,
ich weiß, dass der Threadtitel nicht gerade gut gewählt ist :). Jedoch stehe ich vor einem "Denkproblem". Ich stelle gerade die DB Anbindung meines Webprojekts von direkten Zugang via JDBC auf Hibernate um und komme ins Grübeln.

Ich habe zwei Tabellen a) User (pk:id,.....) und b) Briefmarken (pk:id,....). Normalerweise würde ich durch Fremdschlüssel eine Beziehung von User<->Briefmarken setzen und in einer dritten Tabelle die ids der Tabellen a und b über FKs abspeichern.
Jedoch habe ich bislang einfach immer aus der DB die Daten direkt gelesen und geschrieben. Ich halte in meinem Projekt das Nutzerobjekt im Speicher und greife dann über die User-id direkt auf die Daten aus der Tabelle b) zu.
Jetzt wollte ich das umstellen, quasi in Hibernate eine one-to-many bzw. many-to-many Beziehung "einführen", aber jetzt komme ich zu meinem eigentlichen Denkproblem.

Angenommen: Nutzer A meldet sich am System an (Webapplikation, Client: Browser). Mit Hibernate wird jetzt im Userobjekt die Liste der Briefmarken gefüllt und der Nutzer kann diese Liste aufrufen und bearbeiten. Beendet der Nutzer über den Logout Button seine "Session" werden alle Daten erneut in die Datenbank geschrieben (neu erstellt, aktualisiert).

Das wäre der Idealfall. Was ist jedoch, wenn der Nutzer das Browserfenster schliesst und das System keine Rückmeldung erhält und die Daten nicht in die DB sichert? Was passiert wenn der Nutzer "gleichzeitig" sich im IE und in Opera anmeldet und Änderung vornimmt? Man könnte verhindern das er sich mehrmals anmelden kann, jedoch würde ich das nur ungern machen. In beiden Fällen wären die DB Daten nicht "korrekt".

Wie soll ich nun vorgehen? Ich habe nun die Möglichkeit (wie bisher), dass sobald der Nutzer eine Anfrage ans System hat die Daten direkt aus der Datenbank zu holen oder direkt reinzuschreiben und die Briefmarkenliste im Nutzerobjekt nicht anzulegen und somit keine Verbindung zwischen Tabelle a und b herzustellen.
Im anderen Fall müsste sichergestellt werden, dass die Daten in der Session des Nutzers jederzeit konsistent sind. Das heisst sobald Änderungen an der Briefmarkenliste des Nutzerobjekts gemacht werden, müsste sichergestellt werden, dass diese Änderung bei einem "Absturz" des Programms (oder weg-x-en des Webbrowsers) noch in die Datenbank weggeschrieben werden.

Kann mir jemand evtl. kurz erklären, wie dies in einer Webapplikation oder einer normalen Applikation in Hibernate bzw. JDBC in der Praxis realisiert wird? Ich würde mich auch über Links freuen. :)

Cu
Alex

P.S.: Danke das ihr das durchgelesen habt :)
 
G

Guest

Gast
WeirdAl hat gesagt.:
Angenommen: Nutzer A meldet sich am System an (Webapplikation, Client: Browser). Mit Hibernate wird jetzt im Userobjekt die Liste der Briefmarken gefüllt und der Nutzer kann diese Liste aufrufen und bearbeiten. Beendet der Nutzer über den Logout Button seine "Session" werden alle Daten erneut in die Datenbank geschrieben (neu erstellt, aktualisiert).
Ich denke, hier ist das Problem begraben. Warum sollten die Daten, die bereits bearbeitet worden sind, erneut
geschrieben werden bzw. warum erst zu einem so späten Zeitpunkt?

Der Benutzer holt sich seine Daten ab (Anzeige), bearbeitet sie (einzeln, oder mehrere gleichzeitig) und klickt
im Browser auf Speichern. Tut er dies nicht oder verlässt er die Seite, sind die Daten weg.
Die Daten für die Dauer der gesamten Browser-Session zu halten ist ein "vermeidbarer" Aufwand. Versucht der Benutzer
aus einem anderen Browser heraus die Daten zu ändern, kriegt er eine Fehlermeldung, falls diese bereits von einer
anderen "Arbeitsstation" aus geändert wurden (optimistic locking). Hibernate bzw. JPA bietet eine gute Unterstützung
für optimistic locking (@Version Annotation) und entsprechende Exceptions beim Merge/Persist.

Alternative: Eine Art persistente Sessions, ein Puffer für Änderungen, der immer direkt beschrieben wird und nur
nach Bestätigung in den Datenbestand (also in die eigentlichen Daten des Benutzers) übernommen wird. Dieser
Puffer verbleibt in der Datenbank auch über die Dauer der Session hinaus, so dass man zu einem späteren Zeitpunkt
(nach erneutem Einlogen) den gleiche Stand der Bearbeitung zu sehen kriegt. Nachteil: Doppelte Datenhaltung
und ein nicht zu vernachlässigender Mehraufwand solche Sessions zu verwalten und synchron zu halten.
 

WeirdAl

Bekanntes Mitglied
Huhu, danke für die Antwort :)

Mir geht es unter Anderem darum, dass ich keinen "Sinn" darin sehe die Briefmarkenliste im Userobjekt zu halten, wenn diese Liste eh durch das sofortige speichern der Änderungen in der DB aktuell vorliegt.

Wobei, wenn ich die Liste im User-Objekt halte und direkt die geänderten Daten in dieser Liste sowie in der DB ändere , muss ich nicht bei jedem "Abruf" der Briefmarkenliste lesend auf die DB zuzugreifen (was ich ohne diese Liste im Userobjekt ja machen müsste). Das würde die DB schon n bissl entlasten.

Das mit dem Optimistic Locking muss ich mir mal ansehen bzw. ich werd mich mal in Hibernate reindenken und beginnen die Mapping-files zu schreiben. Danke nochmals für den Denkanstoss

Cu
Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Generelle Frage zum Umgang mit Datensätzen Datenbankprogrammierung 5
M Frage zu Bundesliga-DB Datenbankprogrammierung 1
pkm Frage zu Encodingproblem bei einer Datenbankanbindung Datenbankprogrammierung 1
B Frage bei einer SQL Query Datenbankprogrammierung 3
B Frage zu Datenbank Design bei Events (ZenDesk) Datenbankprogrammierung 1
B SQLite Frage zu SQLite Datenbankverbindung Datenbankprogrammierung 7
M Frage zu JSON Datenbankprogrammierung 16
Psypsy Hibernate / JPA OneToOne MappedBy Frage Datenbankprogrammierung 2
P Frage zu Connection.close() Datenbankprogrammierung 4
R MySQL Frage zum Anlegen von Artikeln inkl. Verbindungen Datenbankprogrammierung 0
M Grundlegende Klassen-Design Frage Datenbankprogrammierung 0
P MySQL Frage zur Einbindung in ein Java Projekt Datenbankprogrammierung 2
I Frage zu Datenmodellierung Datenbankprogrammierung 3
J Normalisierung - Allgemeine Frage zur 3. Normalform (Eventuelle Abhängigkeit) Datenbankprogrammierung 4
F Normalisierung Datenbank Frage Datenbankprogrammierung 5
J Frage zu ResultSet Datenbankprogrammierung 3
W Frage zur Datenbankwahl bei Umstieg auf Java Datenbankprogrammierung 7
D Frage zu DISTINCT in SQL Datenbankprogrammierung 5
K Frage zur Datenprotokollierung bei DML Anweisungen Datenbankprogrammierung 3
K Frage zu SQL Datenbankprogrammierung 2
L PostgreSQL Hibernate-Frage Datenbankprogrammierung 2
K Frage zu Datenbankmodellierung Datenbankprogrammierung 15
L Frage zu UpdateQuery Datenbankprogrammierung 12
8 MySQL Kurze Frage zur Sicherheit Datenbankprogrammierung 9
D Frage zu INSERTS über mehrere Datenbanktabellen Datenbankprogrammierung 3
D Frage zu Ausführungsmöglichkeiten von SQL Befehlen Datenbankprogrammierung 13
D Frage zu SQL Syntax Datenbankprogrammierung 17
D Frage zu potenziellen Leerzeichen in einer Datenbank Datenbankprogrammierung 5
X Connection schließen oder speichern? Performance Frage Datenbankprogrammierung 7
J mal wieder eine Frage zu parallelen Transaktionen.. Datenbankprogrammierung 2
V Frage zu Hibernate-Mapping Datenbankprogrammierung 11
N Allg. Frage zur Datenbankverbindung Datenbankprogrammierung 2
E einfache Frage bei DB-Zugriff Datenbankprogrammierung 11
S MySQL Frage zu LeftJoin Abfrage Datenbankprogrammierung 2
O eigentlich simple SQL Frage Datenbankprogrammierung 2
M Frage zu folgender Query in EJB-QL Datenbankprogrammierung 4
H JBoss: Frage zur Datasource in der ...-ds.xml Datenbankprogrammierung 4
F Frage zu Prepared Statement Datenbankprogrammierung 2
R hibernate Frage zu configFile-Pfad und Groß/Kleinschreibung von Postgres-Tabellen Datenbankprogrammierung 8
U Frage zum Erfassen von hinzufügten und entfernten Objekten Datenbankprogrammierung 9
M prinzipielle Frage zu Datenbanken und jars ... Datenbankprogrammierung 2
S Hibernate - spezielle Frage, n zu n Beziehung Datenbankprogrammierung 11
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
J Frage zu Synchronisation bei parallelem Zugriff, speziell mit JPA Datenbankprogrammierung 2
F EclipseLink persistence.xml Frage Datenbankprogrammierung 11
N Frage zur Sicherheit von Konfigurationsdatei Datenbankprogrammierung 4
H performance frage Datenbankprogrammierung 9
G Frage zum Insert-Statement Datenbankprogrammierung 2
Antoras Design-Frage: Datenzuordnung zu verschiedenen Accounts Datenbankprogrammierung 2
T HSQL: verständnis Frage Datenbankprogrammierung 2
T Java JPA Frage bzgl. DISTINCT Datenbankprogrammierung 2
G Frage zu connection? Datenbankprogrammierung 9
A Frage zu SQL-Abfrage Datenbankprogrammierung 2
G Frage zu SQL "WHERE IN (1, 2, 3. , N)" Datenbankprogrammierung 8
G Allgemeine Frage zu Datenbanklimits Datenbankprogrammierung 27
G allgemeine JDBC-Connection Frage Datenbankprogrammierung 2
G Frage zu Hibernate und M:N Beziehung Datenbankprogrammierung 9
K HQL Frage Datenbankprogrammierung 10
D kurze Frage zu einem Query Datenbankprogrammierung 6
B Hibernate mit MySql - Verständniss Frage Datenbankprogrammierung 8
N Kleine Frage zu Connection Pooling mit DataSource Datenbankprogrammierung 2
T Update-Frage Datenbankprogrammierung 11
E SQL-Frage (Löschen aller Datensätze) Datenbankprogrammierung 9
P Frage zu Performancetest einer Datenbank Datenbankprogrammierung 3
E Nochmal eine Datenbankabfrage Frage :-o (JOIN oder so) Datenbankprogrammierung 4
P frage zu "" bei INSERT STATEMENTS Datenbankprogrammierung 2
K frage zum ausführen eines INSERT statements Datenbankprogrammierung 16
L frage zu mySQL Datenbankprogrammierung 4
C Mal ne Frage an die Experten Datenbankprogrammierung 4
G Frage zum Datenbankdesign Datenbankprogrammierung 5
J DB Verbindung Design Frage Datenbankprogrammierung 5
M Datenbankanbindung in Java : Newbie-Frage Datenbankprogrammierung 2
U Grundsätzliche Frage Datenbankprogrammierung 4
S Frage zu INSERT Datenbankprogrammierung 2
X Wieder mal ne Frage ... Datenbankprogrammierung 15
D Umgang mit Typen und Subtypen im Datenmodell Datenbankprogrammierung 3
D Richtiger Umgang mit Verbindungen in JPA Datenbankprogrammierung 39
R MySQL Umgang mit ResultSet/Fremdschlüssel ausgeben Datenbankprogrammierung 2
A Umgang mit hsqldb Datenbankprogrammierung 24
D Alte Daten ins neue Modell quetschen Datenbankprogrammierung 6
R Mongodb Daten werden immer überschrieben Datenbankprogrammierung 7
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
OnDemand Daten auf mehrere Tabellen aufteilen oder Spalten nutzen Datenbankprogrammierung 2
B Daten HSQL-DB Datenbankprogrammierung 2
V H2 ManyToMany wie speichere ich die Daten? Datenbankprogrammierung 10
thobren Projekt SQlite! Wie kann ich auf auf SQlite Daten zugreifen? Datenbankprogrammierung 4
OnDemand Daten verschlüsseln Datenbankprogrammierung 42
L Oracle Daten in Häppchen selektieren Datenbankprogrammierung 5
L Oracle Daten von Oracle zu MSSQL übertragen Datenbankprogrammierung 4
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Z Ausgabe nur bestimmter Daten Datenbankprogrammierung 6
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
Kirby.exe Vorschläge zur Verschlüsselung von Daten in der DB Datenbankprogrammierung 2
T Java Spiel Daten speichern Datenbankprogrammierung 1
LimDul H2 Embedded DB und Gigabytes an Daten Datenbankprogrammierung 0
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
R Wie mit zu viele Daten umgehen? Datenbankprogrammierung 2
F MySQL Wie speichere ich Daten zeitlich abhängig? Datenbankprogrammierung 4
T Oracle Normalisierung und Daten splitten Datenbankprogrammierung 1

Ähnliche Java Themen

Neue Themen


Oben