2011-12-20 121 views
1

我有自定義的約束,具有以下邏輯:自定義約束,驗證和空

@Override 
public boolean isValid(City city, ConstraintValidatorContext context) { 
    boolean result = (city.getId() > 0 || (city.getName() != null && city.getName() != "")); 
    return result; 
} 

這個效果很好,當我需要檢查City例如,從創建操作(此字段是必需的,它可以通過@NotNull把守) 。

但是當我需要更新一個包含City實例的對象時,這個字段是可選的。因此,即使我將@NotNull約束分組到Create操作,我仍然需要一種方法來檢查它是否爲空,如果它是有效的對象(如果不是)。

我可以做到這一點,而不會對兩個檢查都創建另一個約束嗎?

謝謝你的答案。

+0

你與數據庫後端相結合呢?如果是的話,你是更新整行還是隻更新已更改的列? (調查MERGE) – LazyCubicleMonkey 2011-12-20 08:29:59

+0

不,我有UserModel驗證在UserEntity前面 – Pilgrim 2011-12-20 08:35:15

回答

0

好吧,我完成編輯我的第一個約束與OR null檢查。

@Override 
    public boolean isValid(Country country, ConstraintValidatorContext context) { 
     boolean result = (country==null|| 
          country.getId() > 0 || 
          (country.getName() != null && country.getName() != "")); 
     return result; 
    } 

而且在豆

@NotNull(groups = Create.class) 
    @ValidCountry(groups = {Create.class, Update.class}) 
    private Country country;