java - JPA 中的空版本字段?

标签 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 注释的字段可以为空?

最佳答案

@Version 只是定义一个特定的字段用于乐观锁定。它不影响数据库本身中的列,也不影响验证。因此,如果您想强制执行非空值,则必须使用其他注释。

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

关于java - JPA 中的空版本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16183013/

相关文章:

java - Map<Long, Entity>,如何让map key引用一个Entity Id?

java - 我可以为我的所有实体覆盖 singleTableEntityPersister 吗?

java - 使@MockBean为每个测试用例返回新对象

java - Project Tango onPoseAvailable() 和 getPoseAtTime() 差异

hibernate - Grails GORM查询以匹配多个关联对象

java - 如何按顺序生成 id - Play Framework 2.3.4

java - 你能一次在一个对象上调用多个方法吗?

java - 从服务异常中检索 Spring Integration 中的消息

java - 如何使用 Hibernate 按投影分组

java - JPA Hibernate OneToMany 关系