查看一下 报错的Column对应的字段在数据库和hibernate映射文件中确实存在并且无误
解决方案 »
- 请教一个Struts2+hibernate缓冲问题
- 使用struts2 token老是提示错误
- 可以解释下如下的java代码吗??
- 求 weblogic的性能监控程序
- hibernate 价钱比较
- hibernate下怎么做级联删除?
- 急!!STRUTS的html:file问题,如何设输入框为不可手动输入
- 这个错误怎么解决,com.borland.primetime.util.AssertionException: gbk
- 北京的应届毕业生,在找工作的请进!
- 有个请求图片的http地址,怎么防止请求攻击
- Hibernate的unique="true"无效
- lucene 做全文索引,增量索引问题!求解!
2008-07-02 10:38:19,562 DEBUG RecruitInfoDaoImpl:484 - org.hibernate.exception.SQLGrammarException: could not execute query
这是错误信息
//" 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);这是代码
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;
}
你没配映射吧??来个碰到过这种问题的达人~~!
打印的结果是false
emp_id
emp20080702001
emp20080702002
.
.
.emp20080702010
根据emp20080702010返回emp20080702011sql语句要用到mysql的一些方法
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'),'%')";
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上就会出现
这点无法解释
我也碰到类似问题,ifnull(workday.workdaypay, 0) as workdaypay,这句话在执行createSQLQuery时报SQLGrammarException,加上query.addScalar( "workdaypay", Hibernate.BIG_DECIMAL );就可以了,谢谢