2013-03-20 10 views
6

Muszę zrobić Restrictions.like("sequenceNo", "%" + Integer.valueOf(sequenceNo.trim()) + "%").Jak używać LIKE w hibernacji, oddzielając kryteria dla typu danych liczb całkowitych?

Pole sequenceNo jest typem całkowitym, ale wartością parametru jest sequenceNo. Mój problem polega na tym, że dostaję wyjątek java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer. Z pewnych powodów naprawdę muszę ustawić mój typ danych jako ciąg danych. Kiedy próbowałem go w SQL, aby LIKA był liczbą całkowitą, to działa.

Proszę o pomoc. Dzięki.

+2

Nie można używać 'LIKE' z całkowitych kolumn. Jeśli absolutnie chcesz to zrobić, musisz rzucić liczbę całkowitą na ciąg przed zastosowaniem 'LIKE'. Byłoby to łatwe, gdybyś pisał własny kod SQL, ale teraz jestem zbyt leniwy, aby sprawdzić, jak powiedzieć Hibernate, aby to zrobić :-) –

Odpowiedz

6

Nie można dodawać ograniczeń Kryteriów do celu, ponieważ podczas pobierania wartość właściwości została odlana zgodnie z "typem pola" podanym w klasie Jednostka.

Jednak rozwiązaniem byłoby zastosowanie kryterium SQLRestriction dla odlewania po przepustce. Testowałem i to działa.

yourDetachedCriteriaObj.add(Restrictions.sqlRestriction(" sequenceNo LIKE '%"+yourSequenceNumToSearch+"%' ")); 

Aby uzyskać listę byś zrobił jak poniżej

List ls = yourDetachedCriteriaObj.getExecutableCriteria(yourSession).list(); 
// iterate over list or do whatever. 
+0

Wielkie dzięki maimoona. Działa jak marzenie. –

+0

bez sqlRestriction jest to możliwe. ? –

+0

Kolejną kwestią jest to, że dołączam do tabel, a obie tabele mają kolumnę "sequenceNo", w tym scenariuszu znowu powoduje błąd. –

1

wstydzę, ale ja po obejściu z PostgreSQL

crit.add(Restrictions.sqlRestriction(entry.getKey()+"::text like '%"+entry.getValue().replace("'", "''")+"%'")); 
0

Moi postgres modyfikacja

 
cr34.add(Restrictions.sqlRestriction(cr34.getAlias()+"_.field::text like '%"+ fieldVal+"%'")); 
0

dla parametru wyszukiwania Liczba całkowita

criteria = session.createCriteria (demo.class) .add (Restrictedions.sqlRestriction ("sequenceNo LIKE"% "+ searchParameter +"% ""));

Spróbuj tego ...

0
yourDetachedCriteriaObj.add(Restrictions.sqlRestriction(" sequenceNo LIKE '%"+yourSequenceNumToSearch+"%' ")); 

błąd powrót do unabling typu cast:

operator nie kończy pracy: całkowita ~~ nieznany WSKAZÓWKA: Nie operator odpowiada nazwie i argumentów podanych tyeps (ów). może być konieczne dodanie rzutowania typu jawnego.

tak, możemy użyć tego kodu:

yourDetachedCriteriaObj.add(Restrictions.sqlRestriction(" sequenceNo ::text LIKE '%"+yourSequenceNumToSearch+"%' "));