Hibernate Criteria,Integer和“like”

时间:2009-12-07 11:30:45

标签: java hibernate criteria

我正在将一些我的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会以不同的方式处理这两种情况?

1 个答案:

答案 0 :(得分:8)

您可以使用str expression conversion。如果这是有道理的。

  

str()用于转换数字或   时间值为可读字符串

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

如果列上没有function based index,这将非常慢。