SSH統合ページに'sessionFactory'or'hibernateTemplate'is requiredが表示されます

3257 ワード

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クラスを継承したクラスがセッションを取得する場合、セッションファクトリは使用できません.OpenSessionの形式でSessionを取得するようになったが、HibernateDaoSupport自体がセッションを取得する方法getSession()を持っているため、直接Session se=thisを使用する.getSession();をクリックして、
2.hqlに基づいてユーザ情報を取得する場合、HibernateDaoSupportクラスを継承するクラスではQueryクラスではなく、Listlist=thisを用いる.getHibernateTemplate().find(hql);エンティティクラスのセットを取得する形式