在用hibernateDaoSupport实现分页后,启动的时候报错:
'sessionFactory' or 'hibernateTemplate' is required
解决的办法是:
public abstract class AGenericDao<T> extends HibernateDaoSupport { // get the realType--Class of T private Class<T> clazz; private SessionFactory mySessionFactory ;// 不能直接重写HibernateDaoSupport上的finnal修饰的该getter和setter public void setMySessionFactory(SessionFactory mySessionFactory) { super.setSessionFactory(mySessionFactory); } // get the realType of T by the constructor @SuppressWarnings("unchecked") public AGenericDao() { this.clazz = (Class<T>) ((ParameterizedType) this.getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } public void save(T t) { Session session = mySessionFactory.getCurrentSession(); session.save(t); } public void update(T t) { Session session = mySessionFactory.getCurrentSession(); session.update(t); } public void delete(T t) { // Session session = mySessionFactory.getCurrentSession(); session.delete(t); } @SuppressWarnings("unchecked") public T get(Long id) { Session session = mySessionFactory.getCurrentSession(); return (T) session.get(clazz, id); } @SuppressWarnings("unchecked") public List<T> list() { Session session = mySessionFactory.getCurrentSession(); return session.createQuery("FROM " + clazz.getName()).list(); } /** * 分页查询 * * @param hql * 查询的条件 * @param offset * 开始记录 * @param length * 一次查询几条记录 * @return */ @SuppressWarnings("unchecked") public List<T> queryForPage(final String hql, final int offset, final int length) { List<T> list = super.getHibernateTemplate().executeFind( new HibernateCallback<List<T>>() { @Override public List<T> doInHibernate(Session session) throws HibernateException, SQLException { // TODO Auto-generated method stub Query query = session.createQuery(hql); query.setFirstResult(offset); query.setMaxResults(length); List<T> list = query.list(); return list; } }); return list; } /** * 查询所有记录数 * * @return 总记录数 */ public int getAllRowCount(String hql) { return getHibernateTemplate().find(hql).size(); } }
网上查找相关资料后发现有价值的总结
1、 继承了HibernateDaoSupport类的类获取session时,已不可用SessionFactory.OpenSessioon的形式来获 取Session了,由于HibernateDaoSupport本身已有获取session的方法getSession(),所以直接用Session se=this.getSession();来获取,
2、 在依据hql获取用户信息时,继承了HibernateDaoSupport类的类中不能在使用Query类了,而是用List<Ssh> list = this.getHibernateTemplate().find(hql);形式来获取实体类集合