JPA中的空版本字段?

时间:2013-04-24 03:46:09

标签: java hibernate jpa version bean-validation

http://docs.oracle.com/javaee/6/api/javax/persistence/Version.html中没有任何内容表示无法为空。

运行后

import javax.validation.Validation;
import javax.validation.Validator;

import org.junit.Test;

import static org.junit.Assert.assertFalse;

public class Test
{
    @Test
    public void test()
    {
        //Using Hibernate Validator 4.1.0.Final...
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        assertFalse(validator.validate(new Foo()).isEmpty()); //why does this fail??
    }
}

其中Foo.class只是

import javax.persistence.Entity;
import javax.persistence.Version;

@Entity 
public class Foo
{
    @Version
    private final Integer version = null;
}

测试失败,未报告@Version验证错误。

这是否意味着@ Version-annotated字段可以为null?

1 个答案:

答案 0 :(得分:7)

@Version只定义特定字段用于乐观锁定。它不会影响DB本身的列,也不会影响验证。因此,如果要强制使用非空值,则必须使用其他注释。

如果将版本字段保留为null,则在尝试执行更新时会出现异常。