2009-05-01 10 views
2

Ich verwende Ruhezustand, Feder, Struts-Framework für meine Anwendung.Hibernate @Version Feld Fehler

In meiner Anwendung hat jede der Tabellen ein Feld, das als Version zum Verfolgen der Aktualisierung aller Datensätze aufgerufen wird.

Jedes Mal, wenn ich bin Aktualisierung bestehende Abspeicherung meiner Land-Tabelle, die Version 0, es funktioniert gut & Updates der Datensatz das Versionsfeld aktualisieren, um 1.e

Aber immer, wenn ich versuche, diese Version 1 Datensatz zu aktualisieren, es gibt mir Fehler wie folgt:

org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [com.sufalam.business.marketing.model.bean.Country] with identifier [3]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.company.business.marketing.model.bean.Country#3] 

Gibt es eine Möglichkeit, es zu lösen?

+0

können Sie Ihren Code posten? –

Antwort

3

Die Versionspalte von Hibernate ermöglicht die Implementierung von optimistic concurrency control.

Jedes Mal, wenn ein Objekt aktualisiert werden soll, überprüft Hibernate, ob der in der Datenbank gespeicherte Versionswert mit dem Versionswert im Objekt übereinstimmt. Wenn die beiden sich unterscheiden, wird die StaleObjectStateException ausgelöst, was bedeutet, dass jemand anderes das Objekt aktualisiert hat, während die aktuelle Sitzung geladen, bearbeitet und gespeichert wurde.

Sie müssen sicherstellen, dass der Versionswert in Ihrem Objekt auf den richtigen Wert gesetzt ist. Wenn Sie Objekte von der Sitzung trennen und sie wieder anfügen (Zusammenführen), wird die Wertversionsspalte nicht korrekt gesetzt (z. B. in Webanwendungen, wenn Werte aus Formularen abgerufen werden)

0

"Zeile wurde durch eine andere Transaktion aktualisiert oder gelöscht". Das letzte Mal, als ich das erhalten habe, habe ich Dinge über mehr als ein org.hibernate.Session-Objekt verteilt.

0

Ich erinnere mich nicht genau, aber sollst du an der Instanz hängen bleiben, die du gespeichert hast? Zumindest wenn JPA verwendet wird, gibt es einen Rückgabewert von der Merge-Methode.

Verwandte Themen