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

spn*_*ldk 6 hibernate

基本上,我的问题与此问题相同,但对于Java(JBoss)Hibernate: 我们如何使用hibernate条件API将列命名为int?

我想创建一个订单限制,从字符串列转换为int.就像是

criteria.addOrder(Order.asc("cast(id as int)"));
Run Code Online (Sandbox Code Playgroud)

例外情况是"无法解析[类]的属性:cast(id为int)".我已尝试使用int和整数转换(as)和转换(,).

yor*_*lin 16

尽管话题很老,可能问题已经解决,但我会发布解决方案.也许这对某人来说将来会有所帮助.

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

  • 如果您不想指定升序或降序,则此解决方案有效,因为第二个参数用于原始toSqlString方法.如果你覆盖它,你必须自己在字符串的末尾添加asc或desc. (2认同)
  • KarolR,这就是为什么该方法被称为toSqlString.您可以根据需要编写自己的订单,但应指定整个订单字符串.还有一个 - 总是有顺序的方向,默认情况下使用"asc",因此"cast(id as int)"实际上是"cast(id as int)asc",但你可以跳过它.你可以指定复杂的排序,hibernate应该如何决定放置方向,哪个被指定为参数? (2认同)