2017-01-06 4 views
0

Итак, я пытаюсь понять, как использовать абсолютное значение в моем запросе, и мне не очень повезло. Кто-нибудь знает, как это должно быть написано? Вот что я до сих пор. (A Unit test)Значение критерия гибернации в запросе

Первый вариант - это работа вокруг, где я в основном ИЛИ оба значения. Во второй половине модульного теста я пытаюсь заставить функцию работать, но, очевидно, я неправильно понимаю прогнозы. Есть эксперты? Гэвин?

public void testAbsoluteValueInHibernateCriterion() throws Exception { 
     Criteria subCriteria = ((ActionDAOImpl)getTargetObject(actionDAO, ActionDAOImpl.class)).getSessionFactory().getCurrentSession().createCriteria(Account.class); 
     subCriteria.add(Restrictions.or(Restrictions.eq("currentBalance", 20.00), Restrictions.eq("currentBalance", -20.00))); 
     subCriteria.list(); 

     subCriteria = ((ActionDAOImpl)getTargetObject(actionDAO, ActionDAOImpl.class)).getSessionFactory().getCurrentSession().createCriteria(Account.class); 
     subCriteria.setProjection(Projections.sqlProjection("abs(current_balance)",new String[] {"currentBalance"}, new Type[]{new IntegerType()})); 
     subCriteria.add(Restrictions.eq("currentBalance", 20.00)); 
     subCriteria.list(); 
    } 

    protected <T> T getTargetObject(Object proxy, Class<T> targetClass) throws Exception { 
     if (AopUtils.isJdkDynamicProxy(proxy)) { 
      return (T) ((Advised)proxy).getTargetSource().getTarget(); 
     } else { 
      return (T) proxy; // expected to be cglib proxy then, which is simply a specialized class 
     } 
    } 

Второй метод просто вспомогательный метод, так как я аннотированный объект в Spring, и я его загрузки на это помогает мне добраться до корня сессии.

Мясо моего вопроса лежит в методе testAbsoluteValueInHibernateCriterion.

Что касается таблицы, то это в значительной степени: account с полем current_balance.

ответ

0

Ну это лучшее, что я нашел до сих пор:

subCriteria.add (Restrictions.sqlRestriction ("абс (current_balance) =" + 20,00));

Что мне не нравится в этом, так это то, что он развязывает отображение объекта гибернации с должным образом, но это не самое худшее.

Смежные вопросы