2013-03-20 8 views
6

Ich muss Restrictions.like("sequenceNo", "%" + Integer.valueOf(sequenceNo.trim()) + "%") tun.Wie verwendet man LIKE in Hibernate abgelöste Kriterien für Integer-Datentyp?

Das Feld sequenceNo ist ein Integertyp, aber der sequenceNo Parameterwert ist eine Zeichenfolge. Mein Problem ist, dass ich eine Ausnahme java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer bekomme. Aus irgendwelchen Gründen muss ich meinem Parameter einen String-Datentyp geben. Wenn ich es in SQL versuchte, um eine ganze Zahl zu LIKE, funktioniert es.

Bitte helfen. Vielen Dank.

+2

Sie nicht 'LIKE' mit Integer-Spalten verwenden können. Wenn Sie dies unbedingt tun möchten, müssen Sie die ganze Zahl in eine Zeichenfolge umwandeln, bevor das 'LIKE' angewendet wird. Das wäre einfach, wenn Sie Ihr eigenes SQL schreiben würden, aber im Moment bin ich zu faul, um nachzuschauen, wie ich Hibernate das sagen kann :-) –

Antwort

6

Sie können für diesen Zweck keine Kriterieneigenschaftseinschränkungen hinzufügen, da beim Abrufen der angegebene Eigenschaftswert entsprechend dem in der Entity-Klasse angegebenen 'Feldtyp' vergeben wird.

Allerdings würde eine Lösung SQLRestriction von Kriterien verwenden, um Casting zu umgehen. Ich habe getestet und das funktioniert.

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

Liste Um Ihnen wie unten

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

Vielen Dank maimoona. Klappt wunderbar. –

+0

ohne sqlRestriction ist das möglich. ? –

+0

ein anderes Problem ist ich habe beitreten von Tabellen und beide Tabelle haben "sequenzNo" Spalte, in diesem Szenario erneut Fehler. –

1

Ich schäme mich tun würde, aber ich habe mit Postgres

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

Meine Postgres Modifikation

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

für Integer-Suchparameter

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

Try this ...

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

Rückkehr Fehler für unabling Typumwandlung:

Operator nicht beendet: integer ~~ unbekannt TIPP: Kein Betreiber entspricht den angegebenen Namen und Argument tyeps (s). Sie müssen möglicherweise explizite Typumwandlungen hinzufügen.

so können wir diesen Code verwenden:

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