我用hibernate的原生sql查询出来的list的size为0,但是list不是空的!而且我用hibernate在控制台生成出来的sql可以在数据库里查询出数据,请问这是哪里的问题?
请各位大哥帮忙解答一下,小弟感激不尽!急.....

解决方案 »

  1.   

    list的size为0,但是list不是空的
    这种事是不可能的仔细检查你的代码 如果检查不出来贴下 发现一个错误打一下PP
      

  2.   

    是不是注册了转换器?converter
      

  3.   

    list的size为0,但是list不是空的
    这是可能的,意思是说,按你的SQL语句查出来的数据,是没有至于LZ的,还是帖下SQL和相关的表吧,这样说不清啥问题
      

  4.   

    /**
     * 分配任务
     * @invoiceFilterForm 
     * @since Feb 4, 2010
     * @author 杨信
     * @version 1.00 Feb 4, 2010
     * @throws CreateException 
     */
    public void saveTask(RcjcInvWjcjkxxForm rcjcInvWjcjkxxForm) throws CreateException {
    //定义保存税务机关代码和海关代码的变量
    String sCpcodes = rcjcInvWjcjkxxForm.getCpcode();
    //判断客户端传输的参数是否有效
    if (sCpcodes != null && !"".equals(sCpcodes)) {
    //将海关代码以逗号分隔成一个字符串数组
    String[] sqlWhere = sCpcodes.split(","); 
    //根据数组的大小,依次将每个任务信息插入到任务数据库表中
    for (int i = 0; i < sqlWhere.length; i++) {
    String sCpcode = sqlWhere[i]; //临时变量,存储数组中的每一个元素
    // 查询结果集的sql语句
    StringBuffer sbListSQLQuery = new StringBuffer("SELECT cp.code as cpcode,cp.name as qyName,CONCAT(w.fp_dm,w.inv_no) AS fpNo,")
    .append("w.xfswsbh as xfswsbh,w.gfswsbh as gfswsbh,w.je as je,w.se as se,w.kprq as kprq,")
    .append("w.rzrq as rzrq,cp.swcode as swjgcode,cp.swname as swjgName,cl.name as jbr,fp.name as fzr,t.fp_date as fpsj,")
    .append("t.fp_user_id AS fpUserId,t.cl_user_id AS clUserId ")
    .append("FROM " + WebConstants.SCHEMA_SJWG + ".t28_inv_wjcjkxx w ")
    .append("LEFT JOIN " + WebConstants.SCHEMA_CKTS + ".cpcode cp ON w.cpcode = cp.code ")
    .append("LEFT JOIN " + WebConstants.SCHEMA_SJWG + ".t28_inv_wjcjkxx_task t ON CONCAT(w.fp_dm,w.inv_no) = CONCAT(t.inv_no,t.fp_dm) ")
    .append("LEFT JOIN " + WebConstants.SCHEMA_SJWG + ".t01_dm_user cl ON t.cl_user_id = cl.swry_dm ")
    .append("LEFT JOIN " + WebConstants.SCHEMA_SJWG + ".t01_dm_user fp ON t.fp_user_id = fp.swry_dm ")
    .append("WHERE NVL(t.cl_flag,'0') = '0' AND NVL(t.cancel_flag,'0') = '0' AND TRIM(w.cpcode) = TRIM('" + sCpcode + "') ");

    //设置SQLQuery别名
    SQLQuery listSQLQuery = super.getSession().createSQLQuery(sbListSQLQuery.toString())
    .addScalar("cpcode",Hibernate.STRING)
    .addScalar("qyName", Hibernate.STRING)
    .addScalar("fpNo", Hibernate.STRING)
    .addScalar("xfswsbh", Hibernate.STRING)
    .addScalar("gfswsbh", Hibernate.STRING)
    .addScalar("je", Hibernate.DOUBLE)
    .addScalar("se", Hibernate.DOUBLE)
    .addScalar("kprq", Hibernate.DATE)
    .addScalar("rzrq", Hibernate.DATE)
    .addScalar("swjgcode", Hibernate.STRING)
    .addScalar("swjgName", Hibernate.STRING)
    .addScalar("jbr", Hibernate.STRING)
    .addScalar("fzr", Hibernate.STRING)
    .addScalar("fpsj", Hibernate.DATE)
    .addScalar("fpUserId", Hibernate.STRING)
    .addScalar("clUserId", Hibernate.STRING);

    // 获得结果集
    List list = listSQLQuery.list();
    list = ConvertDoMainEntity.convertInvWjcjkxxQymxDomain(list, list.size());
    if(list != null && list.size() > 0){
    for (int j = 0; j < list.size(); j++) {
    InvWjcjkxxQymxDomain iqd = (InvWjcjkxxQymxDomain) list.get(j);
    // 封装数据到分配任务的对象中
    T28InvWjcjkxxTask iwt = new T28InvWjcjkxxTask();
    String fpNo = iqd.getFpNo(); // 发票号码(由发标号码和发票代码组成)
    iwt.setFpDm(fpNo.substring(0, 10)); // 发票代码
    iwt.setInvNo(fpNo.substring(10));// 发票号码
    iwt.setXfswsbh(iqd.getXfswsbh()); // 销方税务机关代码
    iwt.setGfswsbh(iqd.getGfswsbh()); // 供方税务机关代码
    iwt.setJe(new Double(iqd.getJe())); // 金额
    iwt.setSe(new Double(iqd.getSe())); // 税额
    iwt.setKprq(Tools.string2date(iqd.getKprq(), "yyyy-MM-dd")); // 开票日期
    iwt.setRzrq(Tools.string2date(iqd.getRzrq(), "yyyy-MM-dd")); // 认证日期
    iwt.setZyfpNo(fpNo); // 专用发票号
    iwt.setCpcode(iqd.getCpCode());// 海关代码
    iwt.setGxDate(Tools.string2date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), "yyyy-MM-dd HH:mm:ss"));// 更新日期
    iwt.setFpUserId(rcjcInvWjcjkxxForm.getUserInfo().swryDm); // 负责人ID(当前登陆用户的税务人员代码)
    iwt.setFpDate(Tools.string2date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), "yyyy-MM-dd HH:mm:ss")); // 分配时间
    iwt.setClUserId(rcjcInvWjcjkxxForm.getJbr()); // 经办人ID
    iwt.setClFlag(0 + ""); // 处理标志,0为未处理,1为已处理
    iwt.setCancelFlag(0 + ""); // 作废标志,0为正常,1为作废
    iwt.setOpSwcode(iqd.getSwjgcode()); // 税务机关代码
    super.insert(iwt);
    }
    }
    }
    }
    }

    /**
     * 重新分配任务
     * @param rcjcInvWjcjkxxForm 封装了海关代码的FormBean
     * @throws UpdateException
     * @since Feb 10, 2010
     * @author 杨信
     * @version 1.00 Feb 10, 2010
     */
    public void updateTaskByCpcode(RcjcInvWjcjkxxForm rcjcInvWjcjkxxForm)
    throws UpdateException {
    String sCpcode = rcjcInvWjcjkxxForm.getCpcode(); //获得海关代码
    //判断海关代码是否有效
    if(sCpcode != null && !"".equals(sCpcode)) {
    String[] cpcodes = sCpcode.split(","); //将海关代码以逗号分割成一个字符串数组
    //遍历所有的海关代码,并根据海关代码依次取消属于该海关的任务
    for (int i = 0; i < cpcodes.length; i++) {
    //获得其中的一个海关代码
    String sCpcodeTemp = cpcodes[i];
    // 处理任务的HQL
    String sUpdateHQL = "UPDATE " + rcjcInvWjcjkxxForm.getEntityName() + " SET gxDate = SYSDATE,"
    + "cancelFlag = 1,cancelUserId = :cancelUser,cancelDate = SYSDATE"
    + " WHERE cpcode = :cpcode AND cancelFlag='0' AND clFlag='0' ";
    //获得Query对象
    Query queryUpdate = super.getSession().createQuery(sUpdateHQL)
    .setString("cancelUser", rcjcInvWjcjkxxForm.getJbr())
    .setString("cpcode", sCpcodeTemp);
    //执行取消任务操作
    queryUpdate.executeUpdate();
    }
    }
    try {
    //重新分配任务
    this.saveTask(rcjcInvWjcjkxxForm);
    //这里调用上面的分配任务方法
    } catch (CreateException e) {
    e.printStackTrace();
    }
    }我的目的是:首先将cancel_flag(cancelFlag)更新为1,然后再重新去查找cancel_flag(cancelFlag)=0的数据,请各位大哥帮忙看看
      

  5.   

    // 获得结果集
    List list = listSQLQuery.list();
      //这里显示list的size为0,但是不为空
      

  6.   

    今天也遇到了类似的问题, list不为null,size为0。
    用hibernate在控制台生成的sql语句,然后手动设置参数,确实能查到数据!!
    请问楼主这个问题解决了吗?