按Hibernate顺序标准将字符串转换为int

按Hibernate顺序标准将字符串转换为int,hibernate,Hibernate,基本上,我的问题与此相同,但对于Java(JBoss)Hibernate: 我想通过从字符串列转换为int来创建订单限制。差不多 criteria.addOrder(Order.asc("cast(id as int)")); 例外情况是“无法解析[Class]的属性:强制转换(id为int)”。我尝试了使用int和integer进行cast(as)和convert(,)。如果列包含整数值,最好的解决方案是将其映射为整数而不是字符串 如果由于不清楚的原因,这是不可能的,您可以在该字段的实体和顺

基本上,我的问题与此相同,但对于Java(JBoss)Hibernate:

我想通过从字符串列转换为int来创建订单限制。差不多

criteria.addOrder(Order.asc("cast(id as int)"));

例外情况是“无法解析[Class]的属性:强制转换(id为int)”。我尝试了使用int和integer进行cast(as)和convert(,)。

如果列包含整数值,最好的解决方案是将其映射为整数而不是字符串


如果由于不清楚的原因,这是不可能的,您可以在该字段的实体和顺序中添加一个带注释的整数字段。

尽管主题很旧,并且可能是问题已经解决,但我将发布解决方案。也许这对将来的某个人会有帮助

criteria.addOrder(new org.hibernate.criterion.Order("anystring", true) {
            @Override
            public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
                return "cast(id as int)";
            }
        });

由于通用调用和一些带有字符串标识符的表,决定将所有内容转换为字符串。无论如何,由于maven构建(在hibernate3 maven插件中)上的错误异常,我无法使用公式注释,因此我无法测试它,我将把这个问题留到备用状态。Tksit应该是
@Formula(“cast(id为NUMBER(10,0))”)
如果您不想指定升序或降序,则此解决方案有效,因为在原始的toSqlString方法中使用了第二个参数。如果您重写它,您必须自己在string.KarolR的末尾添加asc或desc,这就是为什么该方法被称为toSqlString。您可以根据需要编写自己的订单,但应指定整个订单字符串。还有一个-顺序总是有方向的,默认情况下使用“asc”,所以“cast(id as int)”实际上是“cast(id as int)asc”,但您可以跳过它。您可以指定复杂的顺序,hibernate应该如何决定将方向放在何处,它被指定为参数?这确实非常有用,而且您刚刚节省了我花大量时间将标准代码重构为sql,只用于顺序问题+谢谢你的评论和回答。