2013-04-24 58 views
3

http://docs.oracle.com/javaee/6/api/javax/persistence/Version.html什么都没说不能为空。JPA中的Null版本字段?

运行

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-annotated字段可以为空?

回答

7

@Version只是定义了一个特定的字段用于乐观锁定。它不影响数据库本身的列或验证。所以,如果你想强制非空值,你必须使用其他注释。

如果您将版本字段保留为空,您将在尝试执行更新时收到异常。