Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate Criteria, Integer and "like"

I'm migrating some of my hql-statements to Criterias now I'm figuring one problem: The entity property is type Integer but I need a like with wildcards search, so in hql I do

session.createQuery("from P1 where id like :id").setString("id", "%"+s+"%")

No problem at all, Hibernate casts String to Integer.

If I try this in Criteria, I only get a ClassCastException

String cannot be cast to Integer

Criteria crit = sessionFactory.getCurrentSession().createCriteria(P1.class);
crit.add(Restrictions.like("id",s)).addOrder(Order.asc("id")).setMaxResults(maxResults);

Why does Hibernate handle both situations differently?

like image 296
onigunn Avatar asked Dec 07 '09 11:12

onigunn


1 Answers

You could use the str expression conversion. If this makes any sense.

str() for converting numeric or temporal values to a readable string

session.createQuery("from P1 where str(id) like :id").setString("id", "%"+s+"%")

This will be quite slow if you do not have a function based index on the column.

like image 87
Thomas Jung Avatar answered Oct 19 '22 05:10

Thomas Jung