Hibernate - Many-to-Many

Em um relacionamento Many-to-One tenho Curso que contem Alunos
Crio um curso, 2 alunos, adiciono os alunos no curso e mando salvar o curso apenas e o alunos também são inseridos, visto que uso o cascade=“save-update”…

código…

[code]try{
SessionFactory sf = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction(); //cria transacao

		Aluno al1 = new Aluno();
		al1.setNome("Leonardo");
		al1.setCpf(123123123);
		al1.setMatricula(102233);
					
		Aluno al2 = new Aluno();
		al2.setNome("Xuxa");
		al2.setCpf(11111111);
		al2.setMatricula(101222);
					
		Curso c1 = new Curso();
		c1.setAlunos(new HashSet<Aluno>());
		c1.getAlunos().add(al1);
		c1.getAlunos().add(al2);
		
		c1.setCodigo(123);
		c1.setNome("Computacao");
		c1.setSigla("CCC");
							
		session.saveOrUpdate(c1);
		
		tx.commit();
		session.close();
		
	} catch (HibernateException e1) {
		e1.printStackTrace();
	}[/code]

Porém em um relacionamento Many-To-Many Curso com Departamento tenho que salvar primeiro o curso, salvar o departamento, criar o objeto do relacionamento e dpois eu salvo tal relacionamento…tem como usar o cascade pra reduzir o processo??? como no exemplo acima que fiz apenas o session.save() e no many-to-many tenho que fazer 3 session.save()

Segue o código pra exemplificar…

[code]try{
SessionFactory sf = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction(); //cria transacao

		Curso c1 = new Curso();
		c1.setCodigo(11);
		c1.setNome("Matemacica");
		c1.setSigla("MAT");
		c1.setDepartamentos(new HashSet<Departamento>());
		
		Departamento d1 = new Departamento();
		d1.setNome("Departamento de Letras");
		d1.setSigla("DELL");			
		d1.setCursos(new HashSet<Curso>());
		
		session.saveOrUpdate(d1);
		session.saveOrUpdate(c1);
		
		DepartamentoCursoID dcomp1 = new DepartamentoCursoID();
		dcomp1.setCurso(c1);
		dcomp1.setDepartamento(d1);
		
		DepartamentoCurso dc1 = new DepartamentoCurso();
		dc1.setComposicaoId(dcomp1);
		
							
		session.saveOrUpdate(dc1);
		
		tx.commit();
		session.close();
		
	} catch (HibernateException e1) {
		e1.printStackTrace();
	}[/code]

Olá,

Se você tem um relacionamento many-to-many e quer apenas que a tabela de ligação entre essas duas entidades guarde a chave de cada entidade, você pode fazer apenas um mapeamento unidirecional em curso, exemplo a coleção de departamentos deverá conter o seguinte mapeamento:

<set name="departamentos" table="NOME_DA_TABELA_DE_LIGACAO" cascade="save-update"> <key column="ID_CURSO" /> <many-to-many class="Departamento" column="ID_DERPARTAMENTO"/> </set>

Com isso você poderá numa única sessão adicionar a coleção de departamentos do curso um único departamente e chamar session.save(curso). Que o Hibernate executará seu comportamento em cascata e guardará as duas chaves na sua tabela de ligação.

Espero ter ajudado.
Um abraço

Olá Galera…

Como faço para salvar no BD atributos de entidades diferentes em uma entidade associativa de relacionamento tenho que ter um servlet para fazer isso?Sabendo que nessa entidade associativa tenho as composições das chaves primárias. Alguém pode me ajudar

Olá Galera…

Como faço para salvar no BD atributos de entidades diferentes em uma entidade associativa de relacionamento tenho que ter um servlet para fazer isso?Sabendo que nessa entidade associativa tenho as composições das chaves primárias. Alguém pode me ajudar