我知道我的问题很奇怪很难理解
我创建了我的项目的一些结构。但是每次我遇到不同的问题could not initialize proxy - No session again
时Not serializable exception
我想得到一些建议或帮助。我尝试使用注释transactional
,但我不明白在哪种情况下我应该使用implements Serializable
. 当然,我知道如果我想使用具有视图范围的 bean,我应该使用客户端保存方法,并且 bean 应该是 implenebts seriailzable。如果我使用其他非原始字段,它也应该是可序列化的。这意味着在接口 IDao 和 ITestSystemService 中使用 inmplenets Serializable 没什么不好。
我的通用 DAO
public interface IDao<T> extends Serializable{
List<T> getAll() throws DAOException;
T get(Long id) throws DAOException;
}
DAO 实现
@Repository("subjectDAO")
@Scope("prototype")
public class SubjectHibernateDAO implements ISubjectDAO{
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(SubjectHibernateDAO.class);
@Autowired
private SessionFactory hibernateSessionFactory;
//getter and setter
@SuppressWarnings("unchecked")
@Override
public List<Subject> getAll() throws DAOException {
Session session = hibernateSessionFactory.getCurrentSession();
Transaction transaction = null;
List<Subject> subjectList = null;
try{
transaction = session.beginTransaction();
subjectList = session.getNamedQuery(GET_ALL_SUBJECTS_NAME_QUERY).list();
transaction.commit();
} catch (HibernateException e) {
if (transaction != null)
transaction.rollback();
logger.error(SQL_EXCEPTION_IN_QUERY, e);
throw new DAOException(SQL_EXCEPTION_IN_QUERY, e);
}
return subjectList;
}
// Generic service interface
public interface ITestSystemService<T> extends Serializable{
List<T> getAll() throws DAOException;
}
//Service realization
@Service("subjectService")
@SessionScoped
public class SubjectServiceImpl implements ISubjectService{
private static final long serialVersionUID = 1L;
@Autowired
@Qualifier("subjectDAO")
private IDao<Subject> subjectDAO;
public void setSubjectDAO(IDao<Subject> subjectDAO) {
this.subjectDAO = subjectDAO;
}
@Override
public List<Subject> getAll() throws DAOException {
return subjectDAO.getAll();
}
}
在我的具有视图范围的 JSF bean 控制器中,我每次都会遇到这种结构的问题。
我应该对我的应用程序结构进行哪些更改?