查看一下 报错的Column对应的字段在数据库和hibernate映射文件中确实存在并且无误

解决方案 »

  1.   

    没用用映射,直接访问数据库的表recruit_info,就跟直接写sql语句一样
      

  2.   

    2008-07-02 10:38:19,562 ERROR JDBCExceptionReporter:72 - Column '' not found.
    2008-07-02 10:38:19,562 DEBUG RecruitInfoDaoImpl:484 - org.hibernate.exception.SQLGrammarException: could not execute query
    这是错误信息
      

  3.   

    String sql = "SELECT max(r.emp_id) FROM recruit_info r";
            //" where emp_id like concat('emp',date_format(now(),'%Y%m%d'),'%')";
    System.out.println(sql);
    List result = (List)DaoFactory.getRecruitInfoDao().executeSql(sql);
    String recruitId = result.get(0).toString();
    System.out.println("recruitId:"+recruitId);这是代码
      

  4.   

    executeSql方法的实现为:
    public Object executeSql(String  sql) throws DAO_EXCEPTION {

    List result =new ArrayList();
    try {
     this.beginTransaction();
     System.out.println(this.getHibernateTemplate().getSessionFactory().getCurrentSession().connection().isClosed());
     result= this.getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(sql).list();
     this.commitTransaction();
    } catch (Throwable e) {
     logger.debug(e);
     this.endTransaction();
    }
    return result;
    }
      

  5.   

    晕,sql没有问题啊,session没有问题.怪了~~
    你没配映射吧??来个碰到过这种问题的达人~~!
      

  6.   

    System.out.println(this.getHibernateTemplate().getSessionFactory().getCurrentSession().connection().isClosed());
    打印的结果是false
      

  7.   

    就是没用配映射的啊,关键是要根据emp_id的值拼凑出结果,如:
    emp_id
    emp20080702001
    emp20080702002
    .
    .
    .emp20080702010
    根据emp20080702010返回emp20080702011sql语句要用到mysql的一些方法
      

  8.   

    把我真正的sql语句写出来吧,在mysql query browser中通过测试,返回值也正确:
    String sql = "select concat('emp',date_format(now(),'%Y%m%d'),lpad(ifnull(max(substring(emp_id,12,3)),0)+1,3,'0'))" +
    " from recruit_info " +
                    " where emp_id like concat('emp',date_format(now(),'%Y%m%d'),'%')";
      

  9.   

    难道csdn的达人都不在
      

  10.   

    今也碰到了这个问题 最后我是这样解决的为max字段加别名e:
    SELECT max (emp_id) e FROM recruit_info hibernate为max字段加类型:
    getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(sql).addScalar("c", Hibernate.LONG);同事分析,在用到mysql的max、count等函数时,hibernate执行原生sql时没办法识别被函数处理的字段的类型,必须手动指定类型;我的看法是被函数处理的字段类型不是int型另外这个问题最诡异的就是本地代码连远程server数据库没问题,只要把代码发布到server上就会出现
    这点无法解释
      

  11.   

    写错 addScalar("e", Hibernate.LONG)
      

  12.   


    我也碰到类似问题,ifnull(workday.workdaypay, 0) as workdaypay,这句话在执行createSQLQuery时报SQLGrammarException,加上query.addScalar( "workdaypay", Hibernate.BIG_DECIMAL );就可以了,谢谢
      

  13.   

    其实,你写查询SQL然后结果映射Map ,但是Map 是key,value! value知道Key不知道,问题来了