Hibernatevalidation – 仅validation对象是否为空

我想validationmyClass变量。 麻烦的是myClass可以是null或对myClass对象的引用 。 如果它是一个引用,我希望它validation对象,如果它是null,显然不应该进行validation。

以下工作但myClass 不能为null。

 public class ParentClass { @Valid @NotNull private MyClass myClass; } public MyClass { @Pattern(regexp="\\d.{10}") private String myField; } 

如果我从ParentClass删除@NotNull注释,即使我保留@Valid注释,它也不再执行validation。

 public class ParentClass { @Valid private MyClass myClass; } public MyClass { @Pattern(regexp="\\d.{10}") //this validation never takes place private String myField; } 

是否可以使用jpa / hibernate注释validation可选的空字段?

当你说this validation never takes place ,你指的是myField为null或填充(或者是否)的情况?

由于我在我的一个项目中也使用了Validator,我运行了一些测试,当myField为null时,它没有经过validation。 当它不为null时,它就是。 我使用以下版本:

  javax.validation validation-api 1.1.0.Final   org.hibernate hibernate-validator 5.0.1.Final   javax.el javax.el-api 3.0.0   org.glassfish.web javax.el 2.2.4  

这是测试代码:

 public class MyClass { public MyClass() { } public MyClass(String myField) { this.myField = myField; } @Pattern(regexp="\\d+\\D+") private String myField; } public class ParentClass { @Valid private MyClass myClass; public ParentClass() { } public ParentClass(MyClass myClass) { this.myClass = myClass; } } public class ValidatorTest { javax.validation.Validator v; @Before public void setup() { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); v = factory.getValidator(); } @Test public void testValidations() { Assert.assertEquals(0, v.validate(new ParentClass()).size()); // Null reference Assert.assertEquals(0, v.validate(new ParentClass(new MyClass())).size()); // Valid reference, null field Assert.assertEquals(1, v.validate(new ParentClass(new MyClass("I fail"))).size()); Assert.assertEquals(0, v.validate(new ParentClass(new MyClass("1 pass"))).size()); } } 

我希望这有帮助。 似乎(对我而言)certificate的行为是正确的。