2009-12-07 23 views
7

Estoy migrando algunos de mis estados de cuenta hql a Criterios ahora me estoy imaginando un problema: La propiedad de la entidad es tipo entero pero necesito un me gusta con búsqueda de comodines, por lo que en hql HagoHibernate Criterios, entero y "me gusta"

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

No hay problema, Hibernate lanza String a Integer.

Si intento esto en Criteria, solo me dan un 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); 

¿Por qué manejar Hibernate ambas situaciones de manera diferente?

+0

Esto no tiene sentido. El motor de consultas en sí puede gestionar esto, pero el motor de criterios no. Parece que hay un error en el Impl de Citeria. – onigunn

Respuesta

8

Puede usar el str expression conversion. Si esto tiene sentido

str() para convertir los valores numéricos o temporales a una cadena legible

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

Ésta será bastante lento si no tiene una function based index en la columna.

Cuestiones relacionadas