java-休眠条件,整数和“喜欢”

我现在将一些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,这将非常慢.

上一篇:java – JPA / Hibernate:CriteriaBuilder – 如何使用关系对象创建查询?


下一篇:java-如何在休眠中实现多个内部联接