Marzec
23
2010

Dodatkowe walidatory Hibernate

Słowa kluczowe: , , , , , , , | Kategorie: Java
No Gravatar

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.


3 odpowiedzi do “Dodatkowe walidatory Hibernate”

  1. W najnowszej wersji biblioteki (additional-hibernate-validators-1.0-20100325.100812-5.jar) uwzględniłem format NIP dla podatników VAT UE.

  2. 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

  3. 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 atrybutem groups.

    Kod źródłowy znajduje się w repozytorium.

    Pozdrawiam,
    Sławek

Napisz Komentarz

*