Ok the problem is that for executeFind() the return type is List....so there is no way to use uniqueResult() within the callback from executeFind()...may be we should use execute()
上面这段话来自http://forum.springframework.org/showthread.php?t=58370
在使用executeFind方法时,如果返回的不是List类型的数据则会出现引异常
例:
public Integer findCount(final Class clazz,final String str) {
return Integer.parseInt(getHibernateTemplate().executeFind(new HibernateCallback()
{
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
StringBuilder sb=new StringBuilder();
sb.append("select count(*) from ");
sb.append(clazz.getName());
sb.append(" ");
sb.append(str);
log.info(sb.toString());
return session.createQuery(sb.toString()).uniqueResult();
}
}).toString());
}
解决方法是把executeFind方法改为execute方法
public Integer findCount(final Class clazz,final String str) {
return Integer.parseInt(getHibernateTemplate().execute(new HibernateCallback()
{
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
StringBuilder sb=new StringBuilder();
sb.append("select count(*) from ");
sb.append(clazz.getName());
sb.append(" ");
sb.append(str);
log.info(sb.toString());
return session.createQuery(sb.toString()).uniqueResult();
}
}).toString());
}