anchor.diff:  ----
   
   ====
  -
  -In this example, both constraints apply to the [methodname]`zipcode` field but with different groups and with different error messages.
   
   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.
   
  
positive.code: @Constraint(validatedBy = ZipCodeValidator.class)
  @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
  @Retention(RUNTIME)
  public @interface ZipCode {
  
      String countryCode();
  
negative.code: [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,
                       message = "zip code is not valid"),
              @ZipCode(countryCode="fr", groups=SuperUser.class,
                       message = "zip code invalid. Requires overriding before saving.")
              } )
      private String zipcode;
  