// 根据访问者Ip来统计下当日提交记录次数
public int getCountByNowDate(String ip) throws Exception {
Session session = this.getSession();
List list = session
.createSQLQuery(
"select count(*) from UserReport where reportIp='"
+ ip
+ "'"
+ " and (CONVERT(varchar(10), AddDate, 120) = CONVERT(varchar(10), GETDATE(), 120))")
.addEntity(UserReport.class).list();
this.releaseSession(session);
if (list.size() > 0) {
return ((Long) list.get(0)).intValue();
} else
return 0;
}
运行这个方法报一下错误
 Hibernate: select count(*) from UserReport where reportIp='127.0.0.1' and (CONVERT(varchar(10), AddDate, 120) = CONVERT(varchar(10), GETDATE(), 120))
08:38  WARN JDBCExceptionReporter:77 - SQL Error: 0, SQLState: S1093
08:38 ERROR JDBCExceptionReporter:78 - 列名 ID 无效。 
隐射关系没有应该没有错误,检查了很多次了 ,就是不知道问题所在,大家帮我看看,谢谢各位了!

解决方案 »

  1.   

    createSQLQuery 好像不用这个 addEntity(UserReport.class). 了嘛
      

  2.   

    你明明是写的sql语句,关映射什么事?报的列名id无效,你把那sql语句复制下来,拿到数据库上去执行,看会不会查出数据。
      

  3.   

    复制SQL语句到SQL可以执行的,不过有可能是createSQLQuery方法用的不对,大家帮看下!
      

  4.   

    addEntity(UserReport.class)是将你的sql查询别名和实体类联系起来,你查询select count(*)返回的是一个数字,肯定不能和实体类联系起来,
    所以就报了错,找不到你UserReport的其他属性,也就是列。
    建议你将sql语句改为Hql语句,获取去掉addEntity后面的,那么返回就不是list而是一个obj,将obj转换为int就OK了,给分。
      

  5.   

    方法的返回值是int,而if (list.size() > 0) {
                return ((Long) list.get(0)).intValue();
    返回的值却是Long
      

  6.   

    检查EntityClass的属性与xml文件中是否一致!在检查xml文件中的字段是否与数据库中的字段一致!
      

  7.   

    建议LZ用HQL,因为你已经用了Hibernate了, 为什么不用它的HQL查询呢?
      

  8.   

    那用HQL怎么写查询呢,用的hibernate不是很熟悉!谢谢
      

  9.   

    前面和sql一样,后面日期那里用DateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String begin=df.format(begintime);
    String end=df.format(endtime);
    //where那里
    where hql+ = "and t.begintime >"+begin+" and t.endtime < "+end; 
      

  10.   

    List list = session.createQuery().addEntity(UserReport.class).list();
    改成这样