2011-03-01 13 views
21

hibernacji w Criteria API ma Restrictions.ilike funkcję, która ma następujący zamówienia:Różnica Restrictions.like i .ilike w hibernacji Criteria API

Przypadek wielkie „podobne”, podobny do Postgres'a operatora ILIKE

To jest fajne. Ale ta sama klasa ma również like funkcji, mając dużo bardziej niejasne zamówienia:

zastosować „jak” ograniczenie do nazwanego własności

przykład

Criteria cr = session.createCriteria(Employee.class); 

// To get records having fistName starting with zara 
cr.add(Restrictions.like("firstName", "zara%")); 

// Case sensitive form of the above restriction. 
cr.add(Restrictions.ilike("firstName", "zara%")); 

Odpowiedz

11

Przypadek-czułość podobny operator, w MySQL, zależy od rodzaju kolumn i ich sortowania (patrz http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html).

Hibernate jest "tylko" warstwą na górze SQL. Umowa podobnego operatora polega na wystawieniu takiego SQL-owego operatora. Jeśli chcesz, aby był taki sam dla MySQL i PostgreSQL, wybierz odpowiednie typy i sortowanie w schematach bazy danych. Ale Hibernate nie może w magiczny sposób sprawić, że wszystkie bazy danych będą korzystały z tych samych reguł.

Zaprojektuj swoją aplikację, wybierz i zaprojektuj swoją bazę danych, aby obserwowane zachowanie było zachowaniem, którego się spodziewałeś.

PS: ale zgadzam się, że javadoc z Hibernate jest ... doskonały.

+0

robi 'ilike' pracy dla mysql? – mmcrae

+0

@mmcrae tak, to powinno działać. Co się stanie, gdy spróbujesz go użyć? –

0

W PostgreSQL istnieje „ILIKE” i „jak” różnych operatorów, Więc wrażliwość przypadku niezależnie od właściwości kolumn to jest powód tego, co się dzieje

-1

hibernacji za Criteria API posiada funkcję Restrictions.ilike który posiada następujące umowy :

A case-insensitive "like", similar to Postgres ilike operator 

To jest fajne. Ale ta sama klasa ma również podobne funkcje, mając znacznie bardziej niejasne zamówienia:

Apply a "like" constraint to the named property 

przykład

Criteria cr = session.createCriteria(Employee.class); 

// To get records having fistName starting with zara 
cr.add(Restrictions.like("firstName", "zara%")); 

// Case sensitive form of the above restriction. 
cr.add(Restrictions.ilike("firstName", "zara%")); 
+0

Druga linia komentarza w tym przykładzie jest sprzeczna z pierwszą linią w tej odpowiedzi! –

0

ilike będzie robić niższą od swojej wartości wejściowej, a niższe wartości kolumny np

select * from table where lower(column) like lower(?)

Powiązane problemy