我现在将一些hql语句迁移到“标准”,以解决一个问题:
实体属性的类型为Integer,但我需要使用通配符搜索,因此在hql中
session.createQuery("from P1 where id like :id").setString("id", "%"+s+"%")
完全没有问题,Hibernate将String转换为Integer.
如果我在Criteria中尝试此操作,则只会收到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);
为什么Hibernate处理这两种情况的方式不同?
解决方法:
您可以使用str expression conversion.如果这有意义的话.
str() for converting numeric or
temporal values to a readable string
session.createQuery("from P1 where str(id) like :id").setString("id", "%"+s+"%")
如果列上没有function based index,这将非常慢.