SSH統合ページに'sessionFactory'or'hibernateTemplate'is requiredが表示されます
3257 ワード
hibernateDaoSupportでページングを実現した後、起動時にエラーを報告します.
解決策は次のとおりです.
ネット上で関連資料を探して価値のある総括を発見します
1.HibernateDaoSupportクラスを継承したクラスがセッションを取得する場合、セッションファクトリは使用できません.OpenSessionの形式でSessionを取得するようになったが、HibernateDaoSupport自体がセッションを取得する方法getSession()を持っているため、直接Session se=thisを使用する.getSession();をクリックして、
2.hqlに基づいてユーザ情報を取得する場合、HibernateDaoSupportクラスを継承するクラスではQueryクラスではなく、Listlist=thisを用いる.getHibernateTemplate().find(hql);エンティティクラスのセットを取得する形式
'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クラスではなく、List