2010-12-28 6 views
0

としてVERSIONを含めるようにエンティティクラスの原因クエリに@Versionを設定私はJPA Toplinkのエッセンシャル、Netbean6.8、私のエンティティクラスでのGlassFish v3のJPA楽観的ロック - 列

を使用している私は、トランザクションでoptimistic lockingを有効にするには、@Version annotationを追加しましたしかし、注釈を追加した後にというクエリが開始され、VERSIONを列として含めるとSQL例外がスローされます。

これまで私が見てきたチュートリアルでは、これについては言及されていません。何が間違っていますか?

スニペット

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; 

使用したクエリ:

SELECT m FROM MasatosanTest2 m 

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

これは正常です。オプティミスティック・ロックでは、データベース側に専用の制御列が必要です。 –

答えて

3

あなたがあなたのテーブルに数値列としてバージョンを追加する必要があります。この列は、オプティミスティック・ロックに使用されます。

しかし、私はオプティミスティックロックの日付フィールドを好むので、その方法でオブジェクトが変更されたときを追跡できます。

+0

ああ..私は最終更新日の列のように見える???ロックが必要な場合はJPAもそうですが、すべてのテーブルにバージョン(または代替)の列が必要ですか? –

+0

私はBenoitがすでにコメントで私の質問に答えたと思います。 –