在 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?
您正在将 fromZip
和 toZip
转换为 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();
希望对您有所帮助。
谁能指导我哪里出错了?它给出零结果,但在数据库中存在值,因为条件出现在下面的查询中。
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?
您正在将 fromZip
和 toZip
转换为 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();
希望对您有所帮助。