Hibernate Criteria,Integer和"like"

oni*_*unn 7 java hibernate criteria

我正在将一些我的hql语句迁移到Criterias现在我正在解决一个问题:实体属性是Integer类型但是我需要一个像通配符搜索一样,所以在hql中我做

session.createQuery("from P1 where id like :id").setString("id", "%"+s+"%")
Run Code Online (Sandbox Code Playgroud)

没问题,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);
Run Code Online (Sandbox Code Playgroud)

为什么Hibernate以不同的方式处理这两种情况?

Tho*_*ung 8

您可以使用str表达式转换.如果这有任何意义.

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

session.createQuery("from P1 where str(id) like :id").setString("id", "%"+s+"%")
Run Code Online (Sandbox Code Playgroud)

如果列上没有基于函数的索引,这将非常慢.