带有表达式的JPA CriteriaBuilder子字符串

时间:2018-10-01 05:34:01

标签: hibernate spring-data-jpa hibernate-criteria criteria-api

我有一个CriteriaBuilder,我试图在其中获取从1到(LengthOfString-5)的字符。但是,我无法获得所需的输出。下面是我想要的输出。

#if first column is not index
#df = df.set_index('date')

df.index = pd.to_datetime(df.index, dayfirst=True)

df1 = df.resample('MS').agg({'price_chair':'mean','vol_glass':'sum'})
print (df1)
            price_chair  vol_glass
date                              
2018-09-01     2.714286         55
2018-10-01     3.000000         20

df2 = df.resample('W').agg({'price_chair':'mean','vol_glass':'sum'})
print (df2)
            price_chair  vol_glass
date                              
2018-09-02     2.000000          6
2018-09-09     2.666667         19
2018-09-16     3.500000         20
2018-09-23     2.000000         10
2018-09-30          NaN          0
2018-10-07     3.000000         20

我已经尝试过这种方法,但是我的IDE在(cb.length(root.get(“ code”))-5)下描述了错误。参数类型表达式,“ int”。

select
            *
        from tbl_job job1_     

        inner join
            tbl_customer customer2_ 
                on job1_.customer_id=customer2_.id 
        where
            job1_.customer_id=customer2_.id 
                    and //

        group by SUBSTRING(job1_.code,1,(LENGTH(job1_.code)-5))

这可能是什么原因? 感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

创建一个保存减法结果的Expression<Integer>,并在substring方法中使用它:

Expression<Integer> lengthMinus5 = cb.sum(cb.length(root.get("code")), -5);
Expression<Integer> one = cb.literal(1);
query.groupBy(cb.substring(root.get("code"), one , lengthMinus5 ));

答案 1 :(得分:0)

尝试检查cb.length(root.get("code"))-5操作数的类型。 左侧为Expression,右侧为int。没有操作员-对此进行处理。

您必须在表达式中包含计算-5