【问题标题】:Hibernate Criteria, Integer and "like"休眠条件,整数和“喜欢”
【发布时间】:2010-12-23 23:39:12
【问题描述】:

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

【问题讨论】:

  • 这没有意义。查询引擎本身能够管理这一点,但条件引擎不能。似乎 citeria impl 有一个错误。

标签: java hibernate criteria


【解决方案1】:

您可以使用str expression conversion。如果这有任何意义。

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

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

如果列上没有function based index,这会很慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    相关资源
    最近更新 更多