ManyYoMany c/ annotations não salva relacionamentos

3 respostas
daniel.netti

Olá pessoal, estou com um problema pra salvar uma entidade (grupo) que tem relacionamento ManyToMany com usuarios:

Consigo salvar normalmente sem nenhum erro o grupo, mas o relacionamento não é salvo (só salva a tabela grupo)
a tabela usuariosGrupos (JoinTable) não recebe nada novo e quando vou ver meu grupo não tem nenhum usuario.
Agradeço qualquer tipo de ajuda (até reza forte em meu nome to aceitando :lol: )

minhas entidades são:
usuarios
usuariosGrupos (Entidade de relacionamento)
grupos

o annotation dos usuarios estão assim:

public class Usuarios implements java.io.Serializable {

	private List<Grupos> grupos;
	@ManyToMany(fetch = FetchType.LAZY,targetEntity=Grupos.class,cascade={CascadeType.PERSIST, CascadeType.MERGE})  
	@JoinTable(name="USUARIOSGRUPOS",joinColumns=@JoinColumn(name="IDUSUARIO"),inverseJoinColumns=@JoinColumn(name="IDGRUPO"))  
	public List<Grupos> getGrupos() {
		return this.grupos;
	}

	public void setGrupos(List<Grupos> grupos) {
		this.grupos = grupos;
	}
.........

E agora dos grupos:

public class Grupos implements java.io.Serializable {

	private List<Usuarios> usuarios;

	@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE},mappedBy = "grupos",targetEntity = Usuarios.class)
	public List<Usuarios> getUsuarios() {
	return usuarios;
	}
	
	public void setUsuarios(List<Usuarios> usuarios) {
		this.usuarios = usuarios;
	}
..........

Meu codigo pra salvar o grupo passando uma Lista de Usuarios já existentes:

......
		Grupos grupo = new Grupos();
		grupo.setClientes(cliente);
		grupo.setNome(gruposManagerBean.getNome());
		grupo.setUsuarios(usuarios);
		grupo.setIdgrupo(new BigDecimal(0));
		grupo.setLogdatainclusao(Function.getDbmsTime());
		DAOFactory daoFactory = DAOFactory.getDAOFactory(DAOFactory.ORACLE);
		GruposDAO gruposDAO = daoFactory.getGruposDAO();
		gruposDAO.doSave( grupo );
........

Agora o DAO (doSave):

public void doSave(Grupos grupo) {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.saveOrUpdate(grupo);
	}

3 Respostas

Lavieri

commit() ?

falta comita a tranzação

Lavieri

outra coisa…

mappedBy = “grupos”

isso ker dizer, que quem ta mapeando não é o grupo, e sim os usuarios, através do campo Usuario.grupos … portanto ele vai persistir pela outra ponta… (salvo engano)

uma ideia interessante, é que apena um dos lados do relacionamente N-N esteja mapeado, é raro o caso onde vc precisa de ter as 2 pontas mapeadas… …

Outra coisa que acho pessimo é liberar set para listas… o ideal é usar um método de add, onde vc pode adcionar outra coleções, ou remover… agora setar um coleção axo q vc fere totalmente o encapsulamento

daniel.netti

Olá Lavieri, obrigado pela resposta, seguem algumas considerações.

1 - O Sistema usa um filter pra cuidar das conexões e transações.
2 - Está mapeando usuarios.grupos pq precisei disso antes de salvar, pra ler o list de grupos quando chamo um usuario, mas sendo nas duas pontas achei que não haveria problemas, vou inverter e testar.
3 - O set não está sendo usado, só coloquei pq fiz um generate de todo mundo.

Valeu pelas dicas, vou testando aqui.

Criado 20 de maio de 2009
Ultima resposta 20 de mai. de 2009
Respostas 3
Participantes 2