3

私は次のエンティティ構造を持っています:


public abstract class BaseEntity {

    private int _version;

    public BaseEntity() {
    }

    @Version
    @Column(name = "oplock", nullable = false)
    private int getVersion() {
        return _version;
    }

    @SuppressWarnings("unused")
    private void setVersion(final int version) {
        _version = version;
    }
    //some other code goes here....

}

具体的なエンティティ:



@Table(name="my_table", schema="public", 
    uniqueConstraints=@UniqueConstraint(columnNames={"username", "attribute"})
)
public class MyEntity extends BaseEntity implements java.io.Serializable {

    private int id;
    private String username;
    private String attribute;
    private String op;
    private String value;

    public MyEntity() {
    }
    //some code goes here ....

}

ここで、データベースからタイプのエンティティを選択し、MyEntityでロックしentityManager.lock(myEntityInstance, LockModeType.OPTIMISTIC);、変更して、変更を保持します。私が期待しているのは、oplock列の値をインクリメントすることです(oplockバージョン列です)が、そのままです。

質問:正しく動作しますか、それとも何か不足していますか? oplockの値がインクリメントされるのが正しい動作だと思います。


編集: hibernate3.6 からhibernate4.1 に切り替えた後も、同じ動作が得られます。

4

1 に答える 1

1

最後に私は私の問題を解決しました:

クラス@MappedSuperclassの上にアノテーションのみを配置しました。BaseEntity詳細については、こちらをご覧ください

于 2012-11-19T12:47:31.617 に答える