SSH整合分页出现'sessionFactory' or 'hibernateTemplate' is required

在用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);形式来获取实体类集合

猜你喜欢

转载自497228829.iteye.com/blog/1927796