2010-12-28 4 views
0

Ich bin mit JPA Toplink Essential, Netbean6.8, Glassfish v3JPA optimistische Sperre - @Version zu Entitätsklasse Ursache Abfrage Einstellung VERSION als Spalte schließen

In meinem Entity-Klasse-I @Version annotation hinzugefügt optimistic locking bei Transaktion zu ermöglichen, Commit jedoch, nachdem ich die Annotation, hinzugefügt meine Abfrage begann einschließlich VERSION als Spalte damit SQL-Ausnahme auslösen.

Nichts davon ist in einem Tutorial erwähnt, das ich bisher gesehen habe. Was könnte falsch sein?

Snippet

public class MasatosanTest2 implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 
    @Column(name = "username") 
    private String username; 
    @Column(name = "note") 
    private String note; 

    //here adding Version 
    @Version 
    int version; 

Abfrage verwendet:

SELECT m FROM MasatosanTest2 m 

Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException 
Call: SELECT id, username, note, VERSION FROM MasatosanTest2 
+2

Es ist normal. Eine optimistische Sperre erfordert eine dedizierte Kontrollspalte auf der Datenbankseite. –

Antwort

3

Sie sollten Version als numerische Spalte zu Ihrer Tabelle hinzuzufügen. Diese Spalte wird für optimistisches Sperren verwendet.

Aber ich bevorzuge Datumsfeld für optimistisches Sperren, auf diese Weise können Sie verfolgen, wenn das Objekt geändert hat.

+0

Ahh .. Ich sehe, wie letzte Änderungsdatum Spalte ??? Also, JPA, wenn Sperre erforderlich ist, muss Version (oder Alternative) Spalte für jede Tabelle haben? –

+0

Ich denke, Benoit beantwortet meine Frage bereits im Kommentar .. –

Verwandte Themen