JPA OptimisticLocking Problem

Hallo zusammen,

Ich habe derzeit ein Problem mit dem Optimistic Locking von JPA (Hibernate als EntityManager). Meine Tabelle hat eine @Version-Spalte anhand derer sich Hibernate ermittelt, ob eine konkurrierende Änderung stattfand. So weit so gut. Auf diesen Daten gibt es auch keinen Hintergrundprozess, der eventuell eine Änderung machen könnte (nur um dies vorab auszuschließen). Es existiert derzeit kein konkurrierender Zugriff, da ich der einzige Tester bin.
Nun ist es aber so, dass wenn ich einen Datensatz ändere und speichere, diese @Version-Spalte automatisch vom EntityManager aktualisiert wird. Nach der Änderung habe ich dann (nicht immer aber oft) eine minimale Differenz zwischen dem Wert der @Version-Spalte im RAM und in der Datenbank. Das sind nur 1 oder 2 Millisekunden, aber das reicht natürlich um beim nächsten Speichern eine OptimisticLockException auszulösen. Daher vermute ich hier einen Fehler.

Kann mir jemand dazu etwas sagen?

Vielen Dank für jeden Hinweis.

Sebastian
 
Hallo turtle,

Wahrscheinlich habe ich mich mal wieder nicht klar ausgedrückt. *grins*
Es ist so das der Datensatz der vom EntityManager nach dem update zurückgegeben wird nicht den exakt gleichen Timestamp hat wie der entsprechende Datensatz in der Datenbank.

Vielleicht mit einem Beispiel:

Ich hab eine Tabelle Kunde (Name, Datum). Dazu passend gibt es ein Kunde-Entity welche auf der property 'Datum' die @Version-Annotation hat.
1. Ich lese einen Kunden aus der Datenbank. Dieser habe nun das Datum (resp. Version) 10.08.2011 12:00:00.000
2. Über die Oberfläche ändere ich nun den Namen und speichere den Kunden.
3. Der EntityManager merged meine Änderung in die Datenbank und erzeugt eine neue Version, in dem er die property 'Datum' erhöht.
4. Wenn ich jetzt die Werte in der Datenbank und im Kunde-Objekt vergleiche, habe ich fast immer Unterschiede im Bereich weniger Millisekunden (z.B. 10.08.2011 12:01:29.123 zu 10.08.2011 12:01:29.124)

Das Update funktioniert ohne Probleme. Arbeite ich nun allerdings mit diesem Kunde-Objekt weiter, ändere wiederum den Namen und speichere erneut, so kommt es aufgrund dieser minimalen Diskrepanz in der Version zu einer OptimisticLockException aufgrund von 'stale data'.

Gruß

Sebastian
 

AFlieger

Mitglied
Wenn du anstatt einer Datumsspalte eine einfache Integer-Spalte mit @Version annotierst, solltest du dem Problem aus dem Weg gehen können.
 
Danke das stimmt schon, löst aber nicht das Problem.
Gibt es denn eine Möglichkeit eine mehr oder weniger automatisierte Aktualisierung eines Timestamps vorzunehmen OHNE dass es sich bei der property um eine @Version handelt?
 
Danke ihr beiden.

Der Hinweis mit dem EntityListener hat mich auf die richtige Spur gebracht.

Hat jemand von euch schon einmal etwas vergleichbares gemacht allerdings um sich den ändernden User zu merken? Das Problem ist ja, dass das in der JPA-Schicht nicht mehr bekannt ist, welcher User die Änderung verursacht.

Gruß

Sebastian
 

AFlieger

Mitglied
Das sollte eigentlich analog dem Datumsfeld funktionieren.

Du wirst sicherlich irgendwo in deiner Applikation die Information über den aktuell angemeldeten Benutzer haben.

Diese Informaion dann einfach in das entsprechende Property der Entit setzen und dann sollte es doch gehen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
C Problem mit Apache Poi Datenbankprogrammierung 6
N HSQLDB Problem mit Eclipselink in runnable Jar Datenbankprogrammierung 10
P GroupLayout-Problem Datenbankprogrammierung 12
F XAMPP max connections problem Datenbankprogrammierung 6
C MySQL Problem in phpMyAdmin Oberfläche Datenbankprogrammierung 5
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
C Problem with insertion in database. Datenbankprogrammierung 7
F Problem mit Hibernate c3p0 Datenbankprogrammierung 2
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
A kleines Problem Datenbankprogrammierung 6
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
V Derby/JavaDB updateRow Problem Datenbankprogrammierung 0
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
Nuiton EmbeddedDriver Problem Datenbankprogrammierung 6
A MongoDB Passwort Problem Datenbankprogrammierung 0
O HSQLDB Hibernate Criteria Problem Datenbankprogrammierung 3
F MySQL JDBC Problem Datenbankprogrammierung 5
Anfänger2011 Datenbankstruktur/aufbau (theoretisches Problem) Datenbankprogrammierung 5
M Derby/JavaDB Drop Database problem Datenbankprogrammierung 3
M Derby/JavaDB NOT LIKE problem Datenbankprogrammierung 19
N HSQLDB Problem mit EntityManager Datenbankprogrammierung 7
B MySQL JPAContainer Problem Datenbankprogrammierung 4
K Eclipse Apache Derby Treiber Problem Datenbankprogrammierung 4
C Problem oder Denkfehler mit H2-Database Datenbankprogrammierung 3
E Wie kann man das Problem mit der BLOB-Spalte lösen? Datenbankprogrammierung 1
M Problem mit jcouchdb und CouchDB - UTF8 kein gültiger Zeichentyp Datenbankprogrammierung 4
T MySQL Problem mit Datenbankanbindung Datenbankprogrammierung 4
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P SQL Query Problem Datenbankprogrammierung 14
A MySQL Problem bei Tabelle ausgeben Datenbankprogrammierung 3
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
B SQLite Problem bei Planung der Datenbank [Jeopardy] Datenbankprogrammierung 3
A Problem mit dem Import und Export von Bildern Datenbankprogrammierung 4
P Oracle Problem mit Umlauten Datenbankprogrammierung 9
A Problem mit Create-Statement Datenbankprogrammierung 9
D Problem mit COLUMN_IDENTIFIERS Datenbankprogrammierung 8
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
R Resultset.last() Problem Datenbankprogrammierung 12
M Problem GroupBy Datenbankprogrammierung 3
S CURRENT_DATE problem Datenbankprogrammierung 2
M Problem mt JPA Id-Generators Datenbankprogrammierung 18
Gossi Oracle Problem mit group by... Datenbankprogrammierung 22
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
R MS-SQL Express Login-Problem Datenbankprogrammierung 8
P Lazy-Fetchig und Session-Problem mit Hibernate Datenbankprogrammierung 4
N HSQLDB Problem beim Treiberladen im Jar Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
C Hibernate ManyToMany zusammengesetzter Primärschlüssel, problem. Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
K Db4o Delete Problem Datenbankprogrammierung 11
Mike90 Deadlock/Lock Problem Datenbankprogrammierung 4
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
S ODBC Treiber Problem/oder unvermögen Datenbankprogrammierung 18
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
B MySQL Problem mit Datenbankanbindung an MySQL Datenbankprogrammierung 2
N Problem bei Erstellung eines Index Datenbankprogrammierung 12
C Hibernate Property-Problem Datenbankprogrammierung 5
J MyBatis - Update Problem Datenbankprogrammierung 4
S JPA: Problem mit Update von Daten Datenbankprogrammierung 7
c_sidi90 Hibernate Problem Table doesnt excist Datenbankprogrammierung 8
M Problem mit JPA - OneToMany-Relation Datenbankprogrammierung 3
I Hibernate: Composite Foreign Key Problem Datenbankprogrammierung 14
I Derby/JavaDB Problem mit Befüllung von Tabelle Datenbankprogrammierung 7
JavaKaffee Derby/JavaDB Quartz-WebAnwendung - Connection/Treiber Problem Datenbankprogrammierung 47
I Problem mit ResultSet Datenbankprogrammierung 2
L Excel in MySQL importieren Problem Datenbankprogrammierung 5
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
T Problem beim schreiben von daten Datenbankprogrammierung 4
M MySQL getConnection - Verbindung Problem Datenbankprogrammierung 2
K Hibernate + MySQL Problem... Datenbankprogrammierung 2
I MySQL MySQL – Proxy Problem Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
M Problem mit Hibernate und Access Datenbankprogrammierung 9
C firebird problem Datenbankprogrammierung 5
F Problem mit Datenbankabfrage Datenbankprogrammierung 7
K SQL Problem mit Date Datenbankprogrammierung 3
jeppi MySQL Design-Problem: DB-Verbindung herstellen und halten - JdbcRowSet / Idle-Timeout? Datenbankprogrammierung 9
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G MySQL Connection Problem Datenbankprogrammierung 3
O MySQL Problem mit Umlauten?! Datenbankprogrammierung 2
E Hibernate Problem bei bidirektionaler 1:n Verbindung Datenbankprogrammierung 2
D MySQL Problem beim einfügen von Double-Zahlen Datenbankprogrammierung 4
M Oracle Problem mit Resultset Datenbankprogrammierung 11
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
W jpmdbc Problem -Beispiel funktioniert nicht Datenbankprogrammierung 9
W Verständnis-Problem JPA Grundlagen Datenbankprogrammierung 5
M Problem Array in BLOB-Feld in DerbyDB zu speichern Datenbankprogrammierung 5
M JPA-Persist Problem Datenbankprogrammierung 2
7 Problem mit Hibernatekonfiguration Datenbankprogrammierung 13

Ähnliche Java Themen

Neue Themen


Oben