Как применить to_number для столбца в критериях Hibernate? - PullRequest
3 голосов
/ 23 ноября 2011

Я использую спящие критерии для получения результатов из таблицы (база данных 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 Ответ

2 голосов
/ 23 ноября 2011

Я знаю, что это возможно с NHibernate с использованием Projection.cast, но AFAIK то, что вы хотите, невозможно с Hibernate.Единственное решение, которое я вижу, используя только Критерии, - это использование @Formula (хотя я никогда сам этого не делал):

@Column
private String someId;

@Formula(value="to_number(someId)")
private Long someIdNumber;

...

criteria.addOrder(Order.asc("someIdNumber"));

Лично я хотел бы рассмотреть упорядочение ваших результатов в Java (с помощью компаратора), потому что какое бы решение ни быловыбор ваших запросов будет зависеть от конкретной СУБД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...