在 hql 查询或条件中将字符串列转换为 int

Casting the string column as int in hql query or criteria

谁能指导我哪里出错了?它给出零结果,但在数据库中存在值,因为条件出现在下面的查询中。

  Str = QueryImpl(from ArcZipCodeRange where cast(fromZip as int) >='12345' and cast(toZip as int)<='12345')
        arcZipCodeRangeList = 0

你确定你的条件是正确的吗?

cast(fromZip as int) >='12345' and cast(toZip as int)<='12345')

将给出 from > 12345 且 to < 12345 的所有结果。

是否应该反过来: from < 12345 和 to > 12345?

您正在将 fromZiptoZip 转换为 int,然后将其与 String 进行比较。那是自找麻烦。

比较两边使用相同的数据类型。

此外 指出,您的情况似乎是错误的。

您可以通过 Hibernate Criteria 轻松完成此操作。对于解决方案,您必须为这些(fromZip 和 toZip)创建自己的 Hibernate Formula。以下必须是你的pojo映射。

@Column
private String fromZip;

@Formula(value="to_number(fromZip)")
private double newfromZip;

@Column
private String toZip;

@Formula(value="to_number(toZip)")
private double newtoZip;

以下是您 select 的标准:

Criteria criteria = session.createCriteria(ArcZipCodeRange.class);
criteria.add(Restrictions.le("newfromZip", yourIntegerParameter));
criteria.add(Restrictions.ge("newtoZip", yourIntegerParameter));
List<ArcZipCodeRange> list = criteria.list();

希望对您有所帮助。