Dodatkowe walidatory Hibernate
W związku z sugestiami czytelników, postanowiłem utworzyć i opublikować kilka przydatnych walidatorów Hibernate. Na początek przygotowałem adnotacje dla czterech numerów identyfikacyjnych: NIP, PESEL, REGON oraz seria i numer dowodu osobistego (@IdentityCard).
Najlepiej będzie, jeżeli wyjaśnię działanie walidatorów na przykładach:
import javax.persistence.*;
import pl.info.czerwinski.validators.IdentityCard;
import pl.info.czerwinski.validators.NIP;
import pl.info.czerwinski.validators.PESEL;
import static pl.info.czerwinski.validators.NIP.PersonType.*;
@Entity
@Table(name="persons")
public class Person {
// […]
@PESEL
public String getPesel() {
return pesel;
}
@IdentityCard(caseSensitive=false)
public String getIdentityCard() {
return identityCard;
}
@NIP(personType=NATURAL)
public String getNip() {
return nip;
}
// […]
}
Domyślnie seria dowodu musi być wpisana wielkimi literami. Aby dopuścić małe litery, ustawiłem atrybut caseSensitive=false (linia 17). Wymagam też, aby NIP podany był w formacie przewidzianym dla osoby fizycznej (000-000-00-00 albo bez łączników).
W przypadku firmy, Numer Identyfikacji Podatkowej wygląda nieco inaczej – tutaj obowiązuje format przewidziany dla osób prawnych (000-00-00-000 albo bez łączników):
import javax.persistence.*;
import pl.info.czerwinski.validators.NIP;
import pl.info.czerwinski.validators.REGON;
import static pl.info.czerwinski.validators.NIP.PersonType.*;
@Entity
@Table(name="companies")
public class Company {
// […]
@NIP(personType=LEGAL)
@NotNull
public String getNip() {
return nip;
}
@REGON
public String getRegon() {
return regon;
}
// […]
}
Numer REGON może przyjmować dwie formy – dziewięcio- oraz czternastoznakową. Aby zawęzić zbiór akceptowanych wartości można użyć dodatkowego atrybutu @REGON(length=REGON_9) albo @REGON(length=REGON_14).
Aby skorzystać z walidatorów w projekcie Maven2, trzeba dodać do zależności bibliotekę:
<project>
[…]
<dependencies>
[…]
<dependency>
<groupId>pl.info.czerwinski</groupId>
<artifactId>additional-hibernate-validators</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
[…]
</dependencies>
[…]
</project>
Biblioteka ta dostępna jest w repozytorium:
<project>
[…]
<repositories>
[…]
<repository>
<id>sczerwinski</id>
<name>Sławomir Czerwiński repository</name>
<url>http://maven2.czerwinski.info.pl/</url>
</repository>
[…]
</repositories>
[…]
</project>
W przypadku innych projektów, należy pobrać ostatnią wersję biblioteki (archiwum .jar) z repozytorium.
Więcej informacji na temat walidatorów można znaleźć na stronie projektu oraz w dokumentacji. Wszystkich zainteresowanych dyskusją lub zgłaszaniem zagadnień zapraszam też do rejestracji na stronie zarządzania projektem.




W najnowszej wersji biblioteki (
additional-hibernate-validators-1.0-20100325.100812-5.jar) uwzględniłem format NIP dla podatników VAT UE.Witam,
Sciagnąłem i chciałbym użyć twojej biblioteki. Niestety annotacje nie pozwalaja na dodanie grupy (np. @NotNull(message = Errors.FIRST_NAME_REQUIRED, groups = FClientTypeChecks.class)
Czy istnieje może wersja umożliwiająca dodanie grupy? Lub czy mogłyś udostępnić mi kodu źrodłowe w celu modyfikacji.
Dziękuję i pozdrawiam
Wojtek
Witam,
Użyta przez mnie w przykładach adnotacja to
org.hibernate.validator.NotNull, o czym chyba nie wspomniałem w treści artykułu. Nie spotkałem się tam z atrybutemgroups.Kod źródłowy znajduje się w repozytorium.
Pozdrawiam,
Sławek