2016-06-28 15 views
0

Ich habe eine MySQL DB, auf die 2 Java-Prozesse von 2 verschiedenen Hosts mit Hilfe des Hibernate-Frameworks zugreifen. Da ich möchte, dass die DB beim Zugriff von den Prozessen auf dem Host konsistent ist, habe ich den Primärschlüssel der Tabelle, auf die ich zugreife, als auto_increment in der zugrunde liegenden Datenbank mit SQL verwendet (obwohl ich wollte, dass eine Lösung auto_increment ist) Hibernate, ich war nicht in der Lage, es zum Laufen zu bringen.) Jetzt ist mein Problem, dass Hibernate Objekte im Speicher zwischenspeichert und wenn eine persistente Operation ausgeführt wird, bekomme ich doppelten Primärschlüsselfehler beim gleichzeitigen Zugriff. Mein Verständnis ist, dass es auf Hibernate basiert, die die primären Schlüsselnummern verwendet, die auf dem höchsten Primärschlüssel basieren, den es während des letzten Lesens gelesen hat. Da jedoch ein anderer Prozess die DB aktualisiert haben könnte, ist der letzte Primärschlüsselwert mit Hibernate veraltet und verwendet einen vorhandenen (durch den anderen Prozess aktualisierten) Primärschlüssel.Hibernate: Multiprozess DB-Zugriff

Ich würde gerne wissen, wenn es eine Möglichkeit gibt zu vermeiden, persistent das Primärschlüssel (wie es zu Doppelarbeit führt) Feld aus dem Ruhezustand und ermöglichen der DB, um es zu bestimmen, mit Auto_increment.

Antwort

0

Sie sollten Ihre Generierungsstrategie in sequence oder guid ändern (abhängig von Ihrer Datenbank). Diese sind sicher und besser, da die ID-Generierung in der Datenbank stattfindet.

Siehe diese Stackoverflow Antwort: How to choose the id generation strategy when using JPA and Hibernate

+0

auch Version oder Zeitstempel .. auf Ihre Entitäten hinzufügen optimistische Sperren zu ermöglichen und jegliche Gleichzeitigkeit Problem vermeiden – Zulfi