我正在使用hibernate分离标准从表中获取结果(Oracle数据库)。我需要通过提升某些列来获取结果顺序。该列包含数字,但数据类型为varchar。如果我们不对列应用to_number()
,则Oracle会按顺序执行ASCII比较。所以,我需要应用to_number()
来排序结果,因为列包含所有数字,但数据类型是varchar。请在下面找到我正在使用的查询
public List<EntityClass> getResults(final String someinput) throws Exception {
DetachedCriteria criteria = DetachedCriteria.forClass(EntityClass.class);
criteria.add(Restrictions.eq("input", someinput));
criteria.addOrder(Order.asc("someId")); // **here id column is of varchar type**.
List<EntityClass> results= this.getHibernateTemplate().findByCriteria(criteria);
return results;
}
criteria.addOrder(Order.asc("someId"));
- 我需要申请to_number
。我们可以轻松地使用SQL查询,但我应该只使用条件查询
请帮我解决这个问题?
答案 0 :(得分:2)
我知道NHibernate使用Projections.cast是可能的,但AFAIK你想要的东西不可能用Hibernate这样。 我只使用Criteria看到的唯一解决方案是使用@Formula(虽然我自己从未这样做过):
@Column
private String someId;
@Formula(value="to_number(someId)")
private Long someIdNumber;
...
criteria.addOrder(Order.asc("someIdNumber"));
就个人而言,我会考虑使用Java(使用比较器)对结果进行排序,因为您选择的任何解决方案都将取决于特定的DBMS。