Niektóre serwisy w przypadku zaawansowanego wyszukiwania wykorzystują zdefiniowane filtry, za pomocą których możemy określić kryteria wyszukiwania.

Przydatne klasy:

Przedstawione poniżej przykłady operować będą na klasie User, która mapuje tabelę usertable w bazie danych.

Do budowania filtrów jako pola, należy używać nazw pól zdefiniowanych w mapowanych klasach.

 

SimpleHibernateFilter filter = new SimpleHibernateFilter( "userName", "jkowalski" ); //użytkownik o loginie "jkowalski"
 
//LUB
 
SimpleHibernateFilter filter = new SimpleHibernateFilter( "userName", "jkowalski", FilterOperator.NOTEQ ); //użytkownicy, poza użytkownikiem o loginie "jkowalski"

W pierwszym filtrze nie zdefiniowaliśmy operatora, dlatego uwzględniany jest domyślny operator EQ. Filtr ten ogranicza wyszukiwanie do użytkownika o loginie "jkowalski". Drugi filtr nadaje ograniczenie na użytkowników poza użytkownikiem o loginie "jkowalski". Świadczy o tym operator NOTEQ.

 

//Tworzymy grupę warunków połączonych operatorem logicznym OR
GroupHibernateFilter groupFilter = new GroupHibernateFilter();
groupFilter.setLogicOperator( LogicOperator.OR );
 
SimpleHibernateFilter filter1 = new SimpleHibernateFilter( "userName", "j%", FilterOperator.LIKE );
groupFilter.addFilter(filter1);
SimpleHibernateFilter filter2 = new SimpleHibernateFilter( "firstName", "j%", FilterOperator.LIKE );
groupFilter.addFilter(filter2);
SimpleHibernateFilter filter3 = new SimpleHibernateFilter( "lastName", "j%", FilterOperator.LIKE );
groupFilter.addFilter(filter3);

Powyższy przykład prezentuje filtry połączone warunkiem logicznym OR. Tak skonstruowany filtr wyszuka użytkowników których login lub imię lub nazwisko zaczynają się na literę "j".

 

//Tworzymy grupę warunków połączonych operatorem logicznym OR
GroupHibernateFilter mainGroupFilter = new GroupHibernateFilter();
mainGroupFilter.setLogicOperator( LogicOperator.OR );

//Tworzymy grupę warunków połączonych operatorem logicznym AND
GroupHibernateFilter subGroupFilter = new GroupHibernateFilter();
subGroupFilter1.setLogicOperator( LogicOperator.AND );


SimpleHibernateFilter filter1 = new SimpleHibernateFilter( "userName", "j%", FilterOperator.LIKE );
subGroupFilter.addFilter(filter1);
SimpleHibernateFilter filter2 = new SimpleHibernateFilter( "firstName", "k%", FilterOperator.LIKE );
subGroupFilter.addFilter(filter2);


//Tworzymy grupę warunków połączonych operatorem logicznym AND (jeżeli nie zdefiniujemy operatora to domyślnie jest nim AND)
SimpleHibernateFilter filter3 = new SimpleHibernateFilter( "userName", "jkowalski" );
subGroupFilter2.addFilter(filter3);

mainGroupFilter.addFilter( subGroupFilter );
mainGroupFilter.addFilter( filter3 );

W powyższym przykładzie został zdefiniowany złożony filtr grupowy. Wynikiem takiej implementacji będzie następujący warunek:

 ( userName like "j%" AND firstName like "k% ) OR ( userName = "jkowalski" )