項目編寫出現問題:登陸頁面進行登陸時,能成功登陸,但是注銷后重新登陸3次以上時,后臺控制臺出現hibernate closing 的問題。懷疑是session factory 和session 出現沒有正確關閉session的問題。于是上網查的以下資料
原代碼:dao層:
@Repositorypublic class tblUserDaoImpl implements tblUserDao{ @Autowired PRivate SessionFactory sf; @Override public List<TblUser> queryOneUser(TblUser user) { String username = user.getUsername(); String passWord = user.getPassword(); String hql = "from TblUser t where t.username=? and t.password=?"; Query query = sf.openSession().createQuery(hql); query.setString(0, username); query.setString(1, password); List<TblUser> resultList = query.list(); return resultList;}如果這樣寫的話,重復幾次登陸會出現卡死情況。目前從網上查找的解決方法是:
1.讓dao層繼承hibernateDaoSupport類
2.此時session factory無法注入的情況,用
@Autowired public void setMySessionFactory(SessionFactory sessionFactory){ super.setSessionFactory(sessionFactory); }方法解決。3.新的類中的方法不能使用query,所以更改查詢方式
綜上,新的代碼為
@Repositorypublic class tblUserDaoImpl extends HibernateDaoSupport implements tblUserDao{ private SessionFactory sf; //登錄用,根據用戶名和密碼進行查找 @Override public List<TblUser> queryOneUser(TblUser user) { String username = user.getUsername(); String password = user.getPassword(); Session session = super.getSession(); String hql = "from TblUser where username = '" +username + "' and password="+password; List<TblUser> resultList = session.createQuery(hql).list(); releaseSession(session); return resultList; } @Autowired public void setMySessionFactory(SessionFactory sessionFactory){ super.setSessionFactory(sessionFactory); } }注意,新更改的查詢方法中,hql語句中的文字部分必須添加引號注明。
新聞熱點
疑難解答