Hibernate - como gravar relacionamento de n-n

1 resposta
R

Pessoal, estou com problemas para gravar no hibernate um relacionamento de n-n ! Ja estou quebrando a cabeça alguns dias. Alguem teve o mesmo problema e poderia me ajudar ? desde já muito obrigado.

eu tenho as seguintes tabelas:
users; role; users_x_role.

e os seguintes mapeamentos no hibernate
Users; Role

Consigo fazer as consultas normalmente, verificar quais regras o usuario possui e etc, porem na hora de gravar uma nova regra para o usario nao esta dando certo, eu tentei o seguinte codigo:

@HibernateTransaction
public class UserBO {

	@HibernateTransaction
	public Users makeUsersPersistent(Users user, Set<Role> roles){
		DAOFactory factory = DAOFactory.getDAOFactory(DAOFactory.HIBERNATE);
		UsersDAO usersDAO = factory.getUsersDAO();
		RoleDAO roleDAO = factory.getRoleDAO();
				
		user.setRoles(roles);
				
		return usersDAO.makePersistent(user);
	}

}

A implementação do DAO segue o tutorial do hibernate:
http://www.hibernate.org/328.html
E o controle de transação segue o tutorial do GUJ
http://www.guj.com.br/java.tutorial.artigo.182.1.guj

O codigo nao lança nenhuma exception mas tb nao grava nada no banco de dados.
Abaixo segue implementação do DAO referente a tornar o objeto persistido no banco de dados

public T makePersistent(T entity) {
    getSession().saveOrUpdate(entity);
    return entity;
}

Abaixo segue como fiz para recuperar do JSP as regras selecionadas, usando myFaces

//usersList é um componentes do myFaces. (ListDataModel) usado para montar a grid no JSP
public void makeUsersPersistent(){
	UserBO usersBO = new UserBO();
	List<Users> users = (List<Users>)usersList.getWrappedData();
	List<Role> roles = (List<Role>)roleList.getWrappedData();
		
	Set<Role> rolesSelected = new HashSet<Role>(0);
		
	for(Role role : roles)
		if(role.isMarked())
			rolesSelected.add(role);
		
	for(Users user : users)
		if(user.isMarked())
			usersBO.makeUsersPersistent(user, rolesSelected);
		
}

1 Resposta

R
sequi esse exemplo... mas nao obtive sucesso tb
@HibernateTransaction
public void makeUsersPersistent(Set<Users> arg, Set<Role> roles){
	DAOFactory factory = DAOFactory.getDAOFactory(DAOFactory.HIBERNATE);
	UsersDAO usersDAO = factory.getUsersDAO();
	
	for(Users user: arg){
		for(Role role: roles){
			role.getUserses().add(user);
			user.getRoles().add(role);
		}
		usersDAO.makePersistent(user);
	}
}
Criado 7 de novembro de 2006
Ultima resposta 7 de nov. de 2006
Respostas 1
Participantes 1