我正在将一些我的hql语句迁移到Criterias,现在我正在解决一个问题: 实体属性是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会以不同的方式处理这两种情况?
答案 0 :(得分:8)
您可以使用str expression conversion。如果这是有道理的。
str()用于转换数字或 时间值为可读字符串
session.createQuery("from P1 where str(id) like :id").setString("id", "%"+s+"%")
如果列上没有function based index,这将非常慢。