Итак, я пытаюсь понять, как использовать абсолютное значение в моем запросе, и мне не очень повезло. Кто-нибудь знает, как это должно быть написано? Вот что я до сих пор. (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
.