4

http://docs.oracle.com/javaee/6/api/javax/persistence/Version.htmlには、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 検証エラーは報告されません。

これは、@Version アノテーションが付けられたフィールドが null になる可能性があることを意味しますか?

4

1 に答える 1

9

@Version は、特定のフィールドが楽観的ロックに使用されることを定義するだけです。DB 自体の列や検証には影響しません。したがって、非 null 値を強制する場合は、他の注釈を使用する必要があります。

バージョン フィールドを null のままにしておくと、更新の実行中に例外が発生します。

于 2013-04-24T07:34:05.577 に答える