我正在使用休眠和彈簧安全性來開發Spring Web應用程序。使用JUnit測試我的dao層:使用JavaConfig進行Spring和休眠
在實現了DAO(使用通用dao模式)併爲CustomUserDetailService和CustomUserDetails進行spring安全性之後,似乎我無法登錄(我在內存ID中使用並且它正在工作),所以我認爲它必須在我的DAO中是個問題。
1)我使用JavaConfig我的配置,這初始化:
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { AppConfig.class,SecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
我以前從未使用過的JUnit測試,我發現使用XML配置的所有例子,所以我需要在其他一些幫助,一個例子會很棒。
2)由於我無法使用JUnit,我試圖弄清楚問題是什麼,所以我添加了一個控制器方法,在那裏我得到一些用戶並在頁面中顯示它們,但是我的GlobalException處理程序攔截並重定向了我此異常的錯誤頁:
org.springframework.orm.hibernate4.HibernateSystemException: No Session found for current thread; nested exception is org.hibernate.HibernateException: No Session found for current thread
這裏是我的GenericDaoImpl:
public class GenericDaoImpl<T,ID extends Serializable> implements GenericDao<T,ID> {
private Class<T> persistentClass;
@SuppressWarnings("unchecked")
public GenericDaoImpl(Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
@Autowired
private SessionFactory sessionFactory;
public Session getSession()
{
return sessionFactory.getCurrentSession();
}
@Override
public boolean create(T t) {
if (t== null) return false;
getSession().saveOrUpdate(t);
return true;
}
@SuppressWarnings("unchecked")
@Override
public T getById(ID id) {
return (T) getSession().get(persistentClass,id);
}
@Override
public boolean update(T t) {
if (t==null) return false;
getSession().update(t);
return true;
}
@Override
public boolean delete(T t) {
if (t==null) return false;
getSession().delete(t);
return true;
}
@Override
public boolean deleteById(ID id) {
T t =getById(id);
if (t==null) return false;
getSession().delete(t);
return true;
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByOneCriteria(Criterion criterion) {
Criteria criteria = getSession().createCriteria(persistentClass);
criteria.add(criterion);
return (List<T>)criteria.list();
}
@SuppressWarnings("unchecked")
@Override
public List<T> findByCriterias(ArrayList<Criterion> criterions) {
Criteria criteria = getSession().createCriteria(persistentClass);
for (Criterion c : criterions)
criteria.add(c);
return (List<T>)criteria.list();
}
}
而且我PersonnelDaoImpl:
@Repository
public class PersonnelDaoImpl extends GenericDaoImpl<Personnel,Integer> implements PersonnelDao {
public PersonnelDaoImpl(){
super(Personnel.class);
}
@Override
public Personnel findByUsername(String username) {
List<Personnel> result = findByOneCriteria(Restrictions.like("username",username));
return result.get(0);
}
@Override
public List<Personnel> findByRole(int role) {
return findByOneCriteria(Restrictions.eq("role",role));
}
}
我沒有得到什麼錯。
值屬性你得到一個異常,當你嘗試登錄? – 2014-09-03 08:14:07
我解決了問題的第二部分(我添加了一個答案),並回答你的問題:不,我得到的例外是當我測試我的服務時(我做了一個可以訪問的頁面,即使用戶沒有登錄在,並使用該服務用於登錄),我得到了上述異常 – Aissasa 2014-09-03 12:12:25