2009-12-07 13 views
7

Sto migrando alcune delle mie istruzioni hql ai Criteri ora sto calcolando un problema: La proprietà entity è di tipo Integer ma ho bisogno di un like con la ricerca con caratteri jolly, quindi in hql Io faccioHibernate Criteria, Integer e "mi piace"

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

Nessun problema, Hibernate lancia String to Integer.

Se provo questo Criteri, ho solo 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); 

Perché gestire Hibernate entrambe le situazioni in modo diverso?

+0

Questo non ha senso. Il motore di query stesso è in grado di gestirlo, ma il motore dei criteri non lo è. Sembra che ci sia un bug alla citeria impl. – onigunn

risposta

8

È possibile utilizzare str expression conversion. Se questo ha un senso.

str() per convertire i valori numerici o temporali in una stringa leggibile

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

Questo sarà piuttosto lento se non si dispone di un function based index sulla colonna.

Problemi correlati