私は次のエンティティ構造を持っています:
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
の値がインクリメントされるのが正しい動作だと思います。
編集: hibernate
3.6 からhibernate
4.1 に切り替えた後も、同じ動作が得られます。