2013-03-20 6 views
6

Devo fare Restrictions.like("sequenceNo", "%" + Integer.valueOf(sequenceNo.trim()) + "%").Come utilizzare LIKE nei criteri di sospensione di ibernazione per il tipo di dati intero?

Il campo sequenceNo è di tipo intero ma il valore di parametro sequenceNo è una stringa. Il mio problema è che ottengo un'eccezione java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer. Per alcuni motivi devo davvero rendere il mio parametro un tipo di dati stringa. Quando ho provato in SQL per LIKE un intero funziona.

Per favore aiuto. Grazie.

+2

Non è possibile utilizzare 'LIKE' con colonne interi. Se si desidera assolutamente eseguire questa operazione, è necessario eseguire il cast dell'intero su una stringa prima dell'applicazione di 'LIKE'. Questo sarebbe facile se tu stessi scrivendo il tuo SQL, ma in questo momento sono troppo pigro per cercare come dire a Hibernate di farlo :-) –

risposta

6

Non è possibile aggiungere restrizioni di proprietà di Criteria per lo scopo, poiché durante il recupero, il valore della proprietà specificato deve essere convertito in base al "tipo di campo" specificato nella classe Entity.

Tuttavia, una soluzione potrebbe utilizzare SQLRestriction di criteri, per passare la trasmissione. Ho provato e funziona.

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

ottenere l'elenco si potrebbe fare come di seguito

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

Grazie mille maimoona. Funziona come un fascino. –

+0

senza sqlRestriction è possibile. ? –

+0

un altro problema è che ho unire delle tabelle e entrambe le tabelle hanno la colonna "sequenceNo", in questo scenario di nuovo genera errore. –

1

mi vergogno, ma ho fatto seguente soluzione con Postgres

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

miei Postgres modifica

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

per il parametro di ricerca Integer

criteri = session.createCriteria (demo.class) .add (Restrictions.sqlRestriction ("sequenceNo LIKE '%" + searchParameter + "%'"));

Prova questo ...

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

errore cambio di cast di tipo unabling:

operatore non uscire: intero ~~ sconosciuta SUGGERIMENTO: Nessun operatore corrisponde alle nome di battesimo e di argomenti tyeps (s). potrebbe essere necessario aggiungere cast di tipo explicitr.

così, possiamo usare questo codice:

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