Musimy zacząć od zmodyfikowania pliku persistance.xml, dodamy nowe property, dzięki któremy będziemy mogli pobrać obiekt typu EntityManagerFactory z pomocą JNDI. Ten zaś z kolei da nam dostęp do EntityManagera. Tak więc dodajemy wpis:
...
<properties>
...
<property name="jboss.entity.manager.factory.jndi.name" value="java:/myEntityManagerFactory"/>
</properties>
</persistence-unit>
Tworzymy teraz nowy validator:
@Documented
@Target(FIELD)
@Retention(RUNTIME)
@ValidatorClass(UsernameValidator.class)
public @interface Username {
String message() default "Podany login juz istnieje";
}
oraz
public class UsernameValidator implements Validator<Username>, Serializable
{
private static final long serialVersionUID = 1L;
EntityManager entityManager;
public void initialize(Username parameters)
{
}
public boolean isValid(Object value)
{
Context ctx = null;
String login = (String) value;
try
{
ctx = new InitialContext();
} catch (NamingException e)
{
e.printStackTrace();
}
EntityManagerFactory entityManagerFactory = null;
try
{
entityManagerFactory = (EntityManagerFactory) ctx.lookup("java:/myEntityManagerFactory");
} catch (NamingException e)
{
e.printStackTrace();
}
entityManager = entityManagerFactory.createEntityManager();
Query q = entityManager.createQuery("FROM Osoba WHERE login = '" + login + "'");
try
{
q.getSingleResult();
return false;
} catch (final NoResultException e)
{
return true;
}
}
}
Jak widzimy używając JNDI pobieramy EntityManagerFactory. Z pomocą entityManagera tworzymy zapytanie, a w bloku try catch, próbujemy uzyskać wynik tego zapytania, jeżeli metoda wyrzuci wyjątek znaczy to, że podany login nie istnieje w bazie. Zakładam, że loginy przechoowywane sa w tabeli Osoba w kolumnie login. Aby skorzystać z naszego validatora wystarczy nad odpowiednim polem dać adnotacje @Username.
Wpisalem na googlach "hibernate validator query" i zgadnijcie co mi jako jeden z pierwszych wynikow zlapalo;)
OdpowiedzUsuńPo wpisaniu tego już jesteśmy na 1. i 2. miejscu oO
OdpowiedzUsuńNasz plan zawładnięcia światem jak narazie się sprawdza! <tu wstaw śmiech szaleńca>
OdpowiedzUsuń