spnbldk
spnbldk

Reputation: 97

Convert string to int in Hibernate order criterion

Basically, my question is the same as this one, but for Java's (JBoss) Hibernate: How can we order a column as int using hibernate criteria API?

I want to create an order restriction with a cast to int from a string column. Something like

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

The exception is "Could not resolve property: cast(id as int) of [Class]". I've tried both cast( as ) and convert(,) with int and integer.

Upvotes: 6

Views: 15188

Answers (2)

yorlin
yorlin

Reputation: 440

Despite the topic is old and may be the problem were solved, I'll post solution. Maybe it will be helpful in future for someone.

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

Upvotes: 17

JB Nizet
JB Nizet

Reputation: 692081

If the column contains integer values, the best solution is to map it as an integer rather than a String.

If, for obscure reasons, this is not possible, you could add a integer field annotated with @Formula("cast(id) as number") in your entity and order on this field.

Upvotes: 3

Related Questions