mal wieder eine Frage zu parallelen Transaktionen..

JanHH

Top Contributor
Hallo,

wie löst man folgendes Problem (mit JPA/Hibernate)?

In einer Tabelle ändert eine Transaktion eine Reihe von Werten, z.B. wird in 100 Zeilen der Wert einer Spalte von "1" auf "2" gesetzt. Während diese Transaktion abläuft, ändert eine andere Transaktion einen dieser Werte (also eine der 100 Zeilen, die von der ersten Transaktion beeinflusst werden) von "1" auf "3".

Ich bin eher ein Anfänger im Bereich der Datenbanken, aber nach dem was ich bisher so weiss gibt es verschiedene locking-Varianten, die immer dazu führen, dass eine der beiden Transaktionen nicht ausgeführt wird (bzw. rollback), je nachdem, welche zuerst committed. Das gewünschte Verhalten ist allerdings, je nach Reihenfolge der Commits:

T1 commited vor T2 (was wohl eher nicht so oft vorkommen dürfte, da T1 generell viel länger läuft): Alle 100 Werte werden auf 2 gesetzt, ob T2 ausgeführt wird (also der Wert 2 oder 3 ist), ist egal

T2 commited vor T1: T1 darf nicht ge-rollbacked werden, was aber das ist, was ich befürchte (weil halt eine Zeile schon von einer anderen transaktion geändert wurde, wobei es da sicher auch eine Rolle spielt, ob T1 oder T2 vorher anfangen). Wenn T1 vor T2 startet, müsste es ja mit einem select for update gehen (und T2 würde beim Versuch, eine bereits "selectete" Zeile zu ändern, abgebrochen werden), im umgekehrten Fall sehe ich das Problem. T1 startet nach T2, T2 hat die Zeile bereits selected, T1 wird abgebrochen beim Versuch, zu committen, und alle 100 Werte bleiben unbeeinflusst.

Also wie auch immer der zeitliche Ablauf ist, T1 soll definitiv ausgeführt werden, T2 ist dann ggf. egal. Kann man den Transaktionen Prioritäten geben (nach dem Motto, T1 gewinnt immer über T2)? Oder wie löst man das?

Gruß+Danke
Jan
 
Zuletzt bearbeitet:

henpara

Bekanntes Mitglied
Also wie auch immer der zeitliche Ablauf ist, T1 soll definitiv ausgeführt werden, T2 ist dann ggf. egal. Kann man den Transaktionen Prioritäten geben (nach dem Motto, T1 gewinnt immer über T2)? Oder wie löst man das?

Gruß+Danke
Jan
Wenn ich dich jetzt richtig verstanden habe wäre wohl die einfachste Methode der Tabelle noch eine Spalte hinzuzufügen und die gesetzt wird, wenn T1 ausgeführt wird. T2 schaut dann ob diese neue Spalte von T1 gesetzt wurde (zB auf 1) und der update Befehl bekommt eben noch ein where neuespalte != 1.
 

JanHH

Top Contributor
Aber da sehe ich keine wirklich Veränderung der Struktur drin. In diesem Fall ist halt noch eine weitere Spalte von Änderungen betroffen, aber alle Probleme parallel laufender Transaktionen werden dadurch nicht behoben. Hab allerdings schon eine andere Idee, wie ich das lösen kann; so dass T2 nur liest, die von T2 vorgenommenen Änderungen werden in einer anderen Tabelle gespeichert (die wiederum von T1 unbeeinflusst bleibt).
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Derby/JavaDB Eine verschlüsselte Derby-Datenbank wieder entschlüsseln Datenbankprogrammierung 4
S mal wieder eine abfrage Datenbankprogrammierung 10
A ByteArray zu String dann wieder zu ByteArray Datenbankprogrammierung 2
N ID wieder bei 0 anfangen Datenbankprogrammierung 2
T Zelleninhalt zu Textfeld und wieder zurück Datenbankprogrammierung 2
B MySQL-Dumpdatei ohne Batchdatei wieder einlesen Datenbankprogrammierung 48
C MP3 in DB als Blob, wieder auslesen und als MP3 speichern??? Datenbankprogrammierung 8
P Schon wieder ein SQL Problem Datenbankprogrammierung 2
J mal wieder passwort im code. Datenbankprogrammierung 6
B Java und MySQL mal wieder Datenbankprogrammierung 3
K Mal wieder Problem mit resultSet , kennt nicht getString() Datenbankprogrammierung 2
P Primärschlüssel direkt nach der Eingabe wieder auslesen Datenbankprogrammierung 7
L DB Felder in einem Array speichern und wieder auslesen Datenbankprogrammierung 11
K Und mal wieder MYSQL Datenbankprogrammierung 9
EagleEye Bild in Datenbank speichern und wieder anzeigen Datenbankprogrammierung 6
D Wieder mal MySQL Datenbankprogrammierung 8
X Wieder mal ne Frage ... Datenbankprogrammierung 15
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
Zrebna PostgreSQL-Query in eine MicrosoftSQL-Query konvertieren - chatGPT hilft nur bedingt. Datenbankprogrammierung 3
T Spring MongoDB: Prüfen ob bereits eine Email existiert Datenbankprogrammierung 15
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Probleme bei Überführung von SQL-Code in eine HQL-Abfrage Datenbankprogrammierung 3
Zrebna Wie mittels PL/SQL eine Datenbankverbindung blockieren? Datenbankprogrammierung 6
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
Kirby.exe Eine Tabelle updaten Datenbankprogrammierung 16
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
Z Aus zwei bestehenden Table eine zusätzliche Gemeinsame machen (JavaFX) Datenbankprogrammierung 21
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
pkm PostgreSQL Auf eine Spalte kann aus einem Teil der SQL-Aussage nicht zugegriffen werden Datenbankprogrammierung 3
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
F Create Table - Habe ich eine schwache Entität erzeugt ? Datenbankprogrammierung 4
Dimax MySQL Trigger für eine Spalte Datenbankprogrammierung 5
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
S MySQL JTable zeigt nach Datenbankabfrage eine Spalte zu viel an Datenbankprogrammierung 0
Thallius MySQL Tabelle splitten aber wie eine abfragen? Datenbankprogrammierung 10
B MySQL Eine Art Sverweis Datenbankprogrammierung 27
O HSQLDB Eine Entität, mehrere Tabellen Datenbankprogrammierung 8
B SQL-Statement Prüfen ob eine Spalte einen Wert enthält Datenbankprogrammierung 2
X SQLite Erhalte bei Query INSERT INTO eine NullPointerException Datenbankprogrammierung 10
L0MiN Wie kann ich eine bestimmte Seite aus verschiedenen Excel-Tabellen in eine neue Exceldatei kopieren? Datenbankprogrammierung 1
N Wie in Java Zugriffe und Updates auf eine Datenbank regeln ? Datenbankprogrammierung 1
E Wie kann ich aus diesem XML eine XMLTABLE-Funktion bauen? Datenbankprogrammierung 3
E Wie kann man mit einer ID-Spalte über eine Parameterübergabe auf eine Seite verweisen? Datenbankprogrammierung 17
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
M Warum ist es suboptimal viele Indexe auf eine Datenbanktabelle zu setzen? Datenbankprogrammierung 4
L Datenmodell erstellen für eine Nutzertanalyse Datenbankprogrammierung 1
serjoscha MySQL Eine Instanz von eigenem DBWrapper -> Fehler durch mehrfachbenutzung möglich? Datenbankprogrammierung 2
S HSQLDB Verbieten eines update auf eine bestimmte reihe Datenbankprogrammierung 4
V HSQLDB Insert in eine Tabelle mit Autoincrement Datenbankprogrammierung 2
H Grosse Menge an Daten in eine Datenbank Datenbankprogrammierung 32
P MySQL eine richtige Datenbank für einen routenplaner erstellen Datenbankprogrammierung 2
D SQL Update auf eine Query möglich? Datenbankprogrammierung 4
S SqlObject - eine objektorientierte Art SQL-Statements zu schreiben. Datenbankprogrammierung 4
C Mit jsp über Java eine DB Abfrage durchführen --> java.lang.ClassNotFoundException Datenbankprogrammierung 4
K SQLite CSV-Datei einlesen in eine Datenbank Datenbankprogrammierung 7
E Datenbank Abfragen in eine GUI schreiben Datenbankprogrammierung 8
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
L MySQL MySql in eine Application einbinden? Datenbankprogrammierung 18
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
D Was passiert bei absolut zeitgleichem Zugriff auf eine Tablerow Datenbankprogrammierung 7
I Belastet es das System zu sehr einen Timer jede 0.2 Sekunden eine DB Abfrage machen zu lassen? Datenbankprogrammierung 9
I Zugriff auf eine Datenbank auf dem Webserver Datenbankprogrammierung 2
F H2:Wie kann man insert eine Reihe "int" wert als blob in table? Datenbankprogrammierung 12
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
H Derby/JavaDB SQLException wenn die Datenbank in eine Jar gepackt wurde. Datenbankprogrammierung 6
turmaline [Hibernate] @OneToMany - Eine referenzierte Tabelle abfragen Datenbankprogrammierung 11
S Werte aus Datenbank auslesen und in eine bestimmte Excelzelle eintragen Datenbankprogrammierung 2
T Wer kann mir eine Datenbank empfehlen Datenbankprogrammierung 13
DStrohma MS SQL Server 2005 + Java: Immer nur eine aktive Verbindung erlaubt? Datenbankprogrammierung 5
D MySQL Wie schreibe ich in eine Datenbank? Datenbankprogrammierung 8
J String[] in eine SQL-Anweisung implementieren Datenbankprogrammierung 13
Q Access Datenbank in eine Internetseite einbinden Datenbankprogrammierung 2
J Über einen Button eine SQL-DB aussuchen Datenbankprogrammierung 3
O eine Tabelle hat mehrere PrimKey mit dem selben Wert Datenbankprogrammierung 9
R Connection Problem für eine externe DB mit Java (JDBC) Datenbankprogrammierung 9
M Zugriff auf eine Access-Datenbank innerhalb eines jar-Files Datenbankprogrammierung 7
N Wie kann ich Zugriff auf eine MS Access DB (mit JDBC) über Netzwerk erreichen? Datenbankprogrammierung 7
G Wie sieht eine Datenbankverbindung mit jndi aus? Datenbankprogrammierung 3
T eine Datenbank updaten Datenbankprogrammierung 6
C Prüfen, ob eine MySQL-Tabelle bereits existiert Datenbankprogrammierung 7
E Wie auf eine MySql Datenbank zugreifen Datenbankprogrammierung 25
D Werte mit java programm in eine Datenbank einlesen Datenbankprogrammierung 7
T JPQL Query für eine Tabellenansicht Datenbankprogrammierung 2
B Wie persistiert man eine Tree-ähnliche Datenbankstruktur? Datenbankprogrammierung 2
M Aus einem Applet eine Datenbankverbindung starten? Datenbankprogrammierung 26
R Datenbankstruktur für eine renn simulation Datenbankprogrammierung 3
H Wie kann ich eine Datenbank Connection aus XML-Datei lesen! Datenbankprogrammierung 2
G Wie baut man eine Anwendung mit DB Zugriff Datenbankprogrammierung 3
S Als Rückgebewert eine Liste von Werten? Datenbankprogrammierung 3
A Auslesen von Werten aus der DB in eine csv-Datei Datenbankprogrammierung 4
O Oracle 11g wirft bei 90 % der installation eine Exception ? Datenbankprogrammierung 5
T Recordsets in eine JTable einlesen mit Netbeans 6.0 Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben