Boa tarde galera !
Estou implementando o uso do DAO+Hibernate ! porem eu nenhum dos artigos que eu li a sessao do hibernate é fechada.
Por exemplo… nesse artigo o DAO recebe a sessao mas eu nenhum momento ele fecha
http://www.hibernate.org/328.html
O problema de naum fechar a sessao é porque esta me ocasionando o seguinte erro:
org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
Eu tentei fechar a conexao e tb tive um problema:
ERROR LazyInitializationException:19 - failed to lazily initialize a collection of role: br.com.icontrol.model.persistence.to.Users.roles - no session or session was closed
Por favor… alguem sabe quando devo fechar a sessao do hibernate, ou se é necessario fechar a sessao ? No codigo abaixo o erro acontece no metodo updateUser
Desde já… muito Obrigado.
Obs.: Eu naum postei a implementacao do DAO, pois usei o dao citado no artigo da pagina do hibernate !
public class UsersBean extends Bean{
private static Logger logger = Util.startLogger(UsersBean.class);
private ListDataModel usersList = null;
private ArrayDataModel userRoles = null;
private ListDataModel roles = null;
private Users userSelected = null;
/**
* Coleta as regras de acesso do usuario
* @return
*/
public ArrayDataModel getUserRoles() {
logger.debug("Carregando regras de acesso do usuario");
userRoles = new ArrayDataModel(userSelected.getRoles().toArray());
logger.debug("Regras do usuario carregado");
HibernateUtility.closeSession();
return userRoles;
}
/**
* Coleta todas as regras de acesso
* @return
*/
public ListDataModel getRoles() {
logger.debug("Carregando todas as regras de acesso");
UserBO UserBO = new UserBO();
roles = new ListDataModel(UserBO.listRoles());
return roles;
}
/**
* Atualiza regras do usuario selecionado
* @return
*/
public String confirmUserRoles(){
logger.debug("Atualizando regras do usuário: " +userSelected.getLogin());
List rolesSelected = (List)roles.getWrappedData();
userSelected.setRoles(new HashSet<Roles>(0));
for(int i = 0; i < rolesSelected.size(); i++){
Roles role = (Roles)rolesSelected.get(i);
if(role.isMarked()){
logger.debug("Adicionando regra: " +role.getRole());
userSelected.getRoles().add(role);
}
}
new UserBO().updateUser(userSelected);
return null;
}
}
public class UserBO {
public List listRoles(){
DAOFactory daoFactory = DAOFactory.getDAOFactory(1);
RolesDAO rolesDAO = daoFactory.getRolesDAO();
HibernateUtility.beginTransaction();
List roles = rolesDAO.list(Roles.class);
HibernateUtility.commitTransaction();
logger.debug("Lista de regras carregada");
return roles;
}
public void updateUser(Users user){
DAOFactory daoFactory = DAOFactory.getDAOFactory(1);
UsersDAO userDAO = daoFactory.getUsersDAO();
HibernateUtility.beginTransaction();
userDAO.makePersistent(user);
HibernateUtility.commitTransaction();
logger.debug("Usuario atualizado");
}
}