Reputation: 97
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
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
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