关于hibernate子查询参数的问题

private Map<String, Object> createWblHqlContext(boolean needGroup, String startDate, String endDate) {
        Map<String, Object> context = new HashMap<String, Object>();
        // 构建hql
        StringBuilder hql = new StringBuilder();
        hql.append(this.createVaInfoWblDaySelectPart(startDate, endDate)).append(" ");

hql.append("from WfjWbl t where 1=1 ");
        List<Object> params = new ArrayList<Object>();
        if (startDate.length() > 0) {
            hql.append(" and t.settlementDate >= ?");
            params.add(startDate);
        }
        if (endDate.length() > 0) {
            hql.append(" and t.settlementDate <= ?");
            params.add(endDate);
        }
        if (needGroup)
            hql.append(" ").append(this.createVaInfoWblDayGroupByPart());
        context.put("hql", hql.toString());
        context.put("params", params);
        return context;
    }

// 构造select字段
    private String createVaInfoWblDaySelectPart(String startDate,String endDate) {
        StringBuilder sb = new StringBuilder();
        sb.append("select t.settlementDate,");// 清算日期
        sb.append("sum(t.amount)/100 ,"); // 清算交易金额
        sb.append("sum(t.amount)/100 ,"); // 交易笔数
        sb.append("sum(t.shopfee)/100 ,"); // 商户手续费
        sb.append("((sum(t.sdsy)/100-sum(t.advancefee)/100)) ,"); // 王府井入账金额
        sb.append("sum(t.sdsy)/100, "); // 收单收入
        sb.append("sum(t.wangsy)/100,"); // 王府井收入
        sb.append("sum(t.cjfsy)/100, "); // 插件方收入
        sb.append("sum(t.wangsh)/100, "); // 王府井损失
        sb.append("sum(t.cjfsh)/100 "); // 插件方损失
        sb.append("( ").append(this.createNoCardPayQueryThirdsySelectByPart())
        .append(this.createNoCardPayQueryThirdsyFromByPart(startDate, endDate))
        .append(" and t.mernum = ‘898110248990216‘").append(this.createVaInfoWblDayGroupByPart()).append(") ");//代垫手续费(国美)

return sb.toString();
    }

// 构造group by字段
    private String createVaInfoWblDayGroupByPart() {
        StringBuilder sb = new StringBuilder();
        sb.append("group by t.settlementDate ");
        return sb.toString();
    }
    
    //构造sql查询代垫手续费,
    private String createNoCardPayQueryThirdsySelectByPart() {
        StringBuilder sb = new StringBuilder();
        sb.append("select sum(t.thirdsy)/100 ");
        return sb.toString();
    }

//构造sql查询代垫手续费的from部分
    private String createNoCardPayQueryThirdsyFromByPart(String startDate, String endDate) {
        StringBuilder sb = new StringBuilder();
        sb.append("from WfjWbl t where 1=1 ");
        List<Object> params = new ArrayList<Object>();
        if (startDate.length() > 0) {
            sb.append(" and t.settlementDate >= ?");
            params.add(startDate);
        }
        if (endDate.length() > 0) {
            sb.append(" and t.settlementDate <= ?");
            params.add(endDate);
        }
        return sb.toString();
    }

当添加红色部分内容时,页面就报org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: ( near line 1, column 215 [select t.settlementDate,sum(t.amount)/100 ,sum(t.amount)/100 ,sum(t.shopfee)/100 ,((sum(t.sdsy)/100-sum(t.advancefee)/100)) ,sum(t.sdsy)/100, sum(t.wangsy)/100,sum(t.cjfsy)/100, sum(t.wangsh)/100, sum(t.cjfsh)/100 ( select sum(t.thirdsy)/100 from cn.net.wangfujing.model.WfjWbl t where 1=1 and t.settlementDate >= ? and t.settlementDate <= ? and t.mernum = ‘898110248990216‘group by t.settlementDate ) from cn.net.wangfujing.model.WfjWbl t where 1=1 and t.settlementDate >= ? and t.settlementDate <= ? group by t.settlementDate

求助!!!

时间: 2024-11-13 08:12:19

关于hibernate子查询参数的问题的相关文章

Hibernate中使用子查询

子查询: 子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一条SQL语句的查询结果,在Hibernate中HQL查询同样对子查询功能提供了支持. 如下面代码所示: List list=session.createQuery("from Customer c where 1>(select count(o) from c.orders o)").list(); 上面的程序查询订单数超过1的所有客户,因此和上面子查询HQL语句对应的SQL语句为: Select *

Hibernate HQL中的子查询

子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一条SQL语句的查询结果,在Hibernate中HQL查询同样对子查询功能提供了支持. 如下面代码所示: List list=session.createQuery("from Customer c where 1<(select count(o) from c.orders o)").list(); 上面的程序查询订单数超过1的所有客户,因此和上面子查询HQL语句对应的SQL语句为: Select * from

Hibernate 笔记 HQL查询 条件查询,聚集函数,子查询,导航查询

本笔记继续使用dept部门表,emp员工表,一对多多对一双向映射. 1 条件查询 1.1    查询 员工表emp中 年龄eage小于30,月薪esal大于20000的员工姓名ename sql:select ename from emp where eage<? and esal >?; hql: select ename from Emp where eage<? and esal >? 1.2 问号的设置与别名 问号(?)的设置使用.setParameter(位置, 属性值)

mybatis 嵌套查询子查询column传多个参数描述

mybatis 嵌套查询子查询column传多个参数如下: 1.图解 2.代码示例 备注:注意,相同颜色的单词都是有关联的. <resultMap id="blogResult" type="Blog"> <association property="author" column="{id=author_id,likename=author_name}" javaType="Author"

hibernate HQL查询的参数绑定

参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: PrepareStatement pre=connection.prepare(“select * from User where user.name=?”); pre.setString(1,”zhaoxin”); ResultSet rs=pre.executeQuery(); 在Hibern

coding++:mybatis 嵌套查询子查询column传多个参数描述

mybatis 嵌套查询子查询column传多个参数如下: 2.代码示例 备注:注意,相同颜色的单词都是有关联的 <resultMap id="blogResult" type="Blog"> <association property="author" column="{id=author_id,likename=author_name}" javaType="Author" selec

Hibernate 函数 ,子查询 和原生SQL查询

一. 函数 聚合函数:count(),avg(),sum(),min(),max() 例:(1)查询Dept表中的所有的记录条数. String hql=" select count(*) from Dept "; Long count=(Long)session.createQuery(hql).uniqueResult(); 当不确定返回的是什么类型的时候可以根据:变量名.getClass()方法得到类型 例如:count.getClass()  返回的是:java.lang.Lo

Hibernate数据查询(转)

Hibernate Query Language(HQL)Criteria QueryNative SQL下面对其分别进行解释Hibernate Query Language:HQL提供了是十分强大的功能,它是针对持久化对象,用取得对象,而不进行update,delete和insert等操作.而且HQL是面向对象的,具备继承,多态和关联等特性.from子句:from子句是最简单的HQL,例如from Student,也可以写成 select s from Student s.它简单的返回Stud

Hibernate 检索查询的几种方式(HQL,QBC,本地SQL,集成Spring等)

1.非集成Spring hibernate的检索方式,主要有以下五种. 1.导航对象图检索方式.(根据已经加载的对象,导航到其他对象.) 2.OID检索方式.(按照对象的OID来检索对象.) 3.HQL检索方式.(使用面向对象的HQL查询语言.) 4.QBC检索方式.(使用QBC(Qurey By Criteria) API来检索对象.) 5.本地SQL检索方式.(使用本地数据库的SQL查询语句.) 1.导航对象图检索方式 利用类与类之间的关系来检索对象.譬如我们要查找一份订单,就可以由订单对象