anchor.diff:  [source, JAVA]
   ----
   public class Address {
  +    @ZipCode(countryCode="fr", groups=Default.class, message = "zip code is not valid"),
  +    @ZipCode(
  +        countryCode="fr",
  +        groups=SuperUser.class,
  +        message = "zip code invalid. Requires overriding before saving."
  +    )
  +    private String zipcode;
  +}
  +----
  +====
  +
  +In this example, both constraints apply to the [methodname]`zipcode` field but with different groups and with different error messages.
  +It is also possible to explicitly use the [classname]`@List` annotation (though simply repeating the annotation is the preferred idiom as of Bean Validation 2.0 and Java 8):
  +
  +.Multi-valued constraint declaration using explicit [classname]`@List` annotation
  +====
  +
  +[source, JAVA]
  +----
  +// Explicitly using @List annotation
  +public class Address {
       @ZipCode.List( {
  -            @ZipCode(countryCode="fr", groups=Default.class
  +            @ZipCode(countryCode="fr", groups=Default.class,
                        message = "zip code is not valid"),
  -            @ZipCode(countryCode="fr", groups=SuperUser.class
  +            @ZipCode(countryCode="fr", groups=SuperUser.class,
                        message = "zip code invalid. Requires overriding before saving.")
               } )
       private String zipcode;
  
positive.code: @Constraint(validatedBy = ZipCodeValidator.class)
  @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
  @Retention(RUNTIME)
  public @interface ZipCode {
  
      String countryCode();
  
negative.code: ----
  
  ====
  
  Using two different multi-constraint annotations for the same underlying constraint type on the same target (i.e. class or property) is not considered portable and is discouraged.
  
  