如何在Hibernate标准中为列应用to_number?

时间:2011-11-23 10:16:52

标签: hibernate criteria

我正在使用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查询,但我应该只使用条件查询 请帮我解决这个问题?

1 个答案:

答案 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。