JPA relacionamento NxN

4 respostas
ATEN

Oi Pessoal minha situação é a seguinte:
Tenho a tabela usuario e a tabela disciplina com um relacionamento NxN entre elas.
Ao persistir os dados não há problema, todavia ao tentar recuperá-los, durante a sessão isto não ocorre, somente se saio e entro de novo do sistema é que é dado update na lista

@Entity
@Table(name = "usuario")
public class Usuario implements Serializable {

// alguns atributos..

@ManyToMany(mappedBy = "usuarios", cascade = CascadeType.ALL)
private List<Disciplina> disciplinas = new ArrayList<Disciplina>();


// getters e setters
@Entity
@Table(name = "disciplina")
public class Disciplina implements Serializable {
// outros atributos

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name= "participa")		
private List<Usuario> usuarios = new  ArrayList<Usuario>();

// getters e setters

Já tentei na classe usuario dar um mege e um find após persistir os dados, mas ele nao recupera a lista de disciplinas do usuario.
Alguem pode me dar uma luz de como atualizar os dados do usuário???
[]s e desde já obrigado

4 Respostas

drsmachado

Não entendi, teu problema é no select ou no update?
Se for no update, como você está fazendo com seu entitymanager? Está dando flush ou commit após o merge?

ATEN

drsmachado:
Não entendi, teu problema é no select ou no update?
Se for no update, como você está fazendo com seu entitymanager? Está dando flush ou commit após o merge?

Problema no update mesmo, estou dando commit apos o merge.

drsmachado

Poste a classe em que isto está sendo realizado.

ATEN

Estou populando o relacionamento NxN desta maneira, tentei dar um merge no usuario antes do commit, mas tb não funcionou.

public boolean cadastroUserToDisciplina(Usuario usuario, Disciplina disciplina){
		EntityManager em = JPAUtil.getInstance().getEntityManager();
		EntityTransaction tx = em.getTransaction();
		try {
			tx.begin();
			usuario = em.find(Usuario.class, usuario.getId());
			disciplina = em.find(Disciplina.class, disciplina.getId());
			usuario.getDisciplinas().add(disciplina);
			disciplina.getUsuarios().add(usuario);			
			disciplina = em.merge(disciplina);
			tx.commit();
			return true;
		}catch(Exception e ){
			tx.rollback();
			e.printStackTrace();
			return false;
		}finally{
			em.close();
		}
	}
Criado 25 de janeiro de 2013
Ultima resposta 25 de jan. de 2013
Respostas 4
Participantes 2