2014-01-06 10 views
0

如果对象A具有上一个字段或属性,则该字段或属性的注释@Valid,也将当对象A被验证验证。上的方法@Valid注释(Java EE 6的)

我正在查看具有@Valid方法的代码。我的第一个问题是:这里假设它是一个属性的吸气剂?

@OneToOne 
@Valid 
public Contact getContact() { 
    return contact; 
} 

这样算下来以上,相当于

@Valid Contact contact;

我的第二个问题是,上面的注释将总是验证联系人对象时,对象A被验证?即使联系中没有任何变化?

回答

1

在Bean验证中,属性级注释通常放在getter上。注释字段或相应的JavaBeans getter方法之间的区别在于,对于后者,验证引擎将调用getter以获取该值,而在第一种情况下,字段值将直接进行访问。如果你的吸气器做任何类型的附加计算等,这可以有所作为。

关于你的第二个问题,是的,当验证父对象时总是会验证相关的联系人,不会检查更改或类似情况。

+0

好的。谢谢你的回答。所以实际上getContact()方法的返回值正在验证中。对于何时验证(在这种情况下),我有点困惑(正如你所看到的)。在getContact()被调用后,或者在稍后的某个“验证”阶段,是否立即验证返回值? 。? – johnm

+0

通常可以手动触发验证(通过获取'javax.validation.Validator'并调用它的'validateXy()'方法之一),并在某些事件中自动触发。发布JSF表单时,坚持约束实体或调用CDI Bean的约束方法。所以要回答这个问题,需要更多关于对象使用的细节。请注意,特别是在通过JPA进行生命周期验证的情况下,将不会执行对引用实体的级联验证,而是每个实体在持久时都会自行验证。 – Gunnar