2014-01-06 9 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