查询中的Hibernate准则绝对值

时间:2017-01-06 23:22:47

标签: java hibernate criteria hibernate-criteria

所以我试图弄清楚如何在我的查询中使用绝对值,而且我没有太多运气。有谁知道应该怎么写?这是我到目前为止所拥有的。 (单元测试)

第一个选项是解决方法,我基本上是两个值。单元测试的后半部分我试图让函数工作,但显然我不能正确理解投影。那里有专家吗?加文?

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

1 个答案:

答案 0 :(得分:0)

这是迄今为止我发现的最好的:

subCriteria.add(Restrictions.sqlRestriction(“abs(current_balance)=”+ 20.00));

我不喜欢的是它解开了与属性的hibernate对象映射,但它并不是最糟糕的。