所以我试图弄清楚如何在我的查询中使用绝对值,而且我没有太多运气。有谁知道应该怎么写?这是我到目前为止所拥有的。 (单元测试)
第一个选项是解决方法,我基本上是两个值。单元测试的后半部分我试图让函数工作,但显然我不能正确理解投影。那里有专家吗?加文?
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 :(得分:0)
这是迄今为止我发现的最好的:
subCriteria.add(Restrictions.sqlRestriction(“abs(current_balance)=”+ 20.00));
我不喜欢的是它解开了与属性的hibernate对象映射,但它并不是最糟糕的。