Examples
For example:
import jakarta.persistence.Column;
@DomainObject
public class Customer {
public static class EmailSpecification extends AbstractSpecification<String> {
public String satisfiesSafely(String proposed) {
return EmailUtil.ensureValidEmail(proposed); (1)
}
}
@@Column(nullable=true) (2)
@Property(
maxLength=30,
mustSatisfy=EmailSpecification.class,
regexPattern = "(\\w+\\.)*\\w+@(\\w+\\.)+[A-Za-z]+",
regexPatternFlags=Pattern.CASE_INSENSITIVE
)
@Getter @Setter
private String emailAddress;
// ...
}
| 1 | the (fictitious) EmailUtil.ensureValid(…) (omitted for brevity) returns a string explaining if an email is invalid |
| 2 | generally use instead of the @Property#optionality attribute |
|
The annotation is one of a handful (others including @Collection, @CollectionLayout and @PropertyLayout) that can also be applied to the field, rather than the getter method. This is specifically so that boilerplate-busting tools such as Project Lombok can be used. |