Boa Tarde Galera.
Estou com o seguinte problema tenho duas classes “Dependente” e “Paciente” e um relacionamento ManyToMany, consigo gravar o primeiro cadastro tranquilo, cadastro um paciente e logo em seguida um dependente relacionando com este paciente.
Agora entra o problema, quando tento gravar este dependente para outro paciente, ele simplesmente não grava nada e também não da erro algum.
O hibernate criou um tabela chamada “dependente_paciente”, quando gravo o primeiro registro ele insere nesta tabela, já quando vou tentar fazer outro cadastro ele não grava nada.
O sistema está me trazendo os dados de paciente e dependente, só que não grava.
Meu relacionamento
@ServerOnly
@ManyToMany
@AccessType(value="field")
@JoinColumn(name="pacientes")
private List<Paciente> pacientes;
Meu metodo para gravar
dependente.setEstado(estadoDep);
dependente.addPaciente(paciente);
dependente.setNome(cbDependente.getRawValue());
dependente.setCpf(tfCpfDep.getValue());
dependente.setDtnascimento(dtNascDep);
dependente.setSexo(sexoDep);
servico.gravarDependente(dependente, new AsyncCallback<Dependente>() {
	public void onFailure(Throwable caught) {
		com.google.gwt.user.client.Window
				.alert("Falha ao Gravar ou Alterar Dependente....."
						+ caught);
		
	}
	public void onSuccess(Dependente result) {
	          Info.display("Dependente alterado",
					"Alterado dependente {0} ", result.getNome()
							+ "... Alterado com sucesso.");
	
	}
});
Minha persistencia
session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.flush();
entidade = (T) session.merge(entidade);
tx.commit();
         
        
          
        
           
           
           
         
         
            
            
          
       
      
        
        
          não entendi bem o problema. como estão mapeadas suas classes do hibernate?
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          Bom Dia Galera.
O Mapeamento é feito através do hibernate.cfg.xml:
<mapping class="br.com.agsisistemas.client.entidade.Paciente"/> 
<mapping class="br.com.agsisistemas.client.entidade.Dependente"/> 
e o Relacionamento é feito pela classe Dependente:
@ServerOnly
@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE} )
@AccessType(value="field")
@JoinColumn(name="pacientes")
private List<Paciente> pacientes;
Obrigado.
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          tente mapear sua classe dependente dessse jeito:
	 @ManyToMany  
	   @JoinTable(name = "NOME_TABELA_DEPENDETE",    
	     joinColumns = { @JoinColumn(name = "IDDEPENDENTE")},  
	       inverseJoinColumns={@JoinColumn(name="IDPACIENTE")})
	private Set<br.com.agsisistemas.client.entidade.Paciente> pacientes;
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          Boa Tarde.
Tentei fazer da forma que você passou, mais mapeando dessa forma ele me deixa criar as tabelas mas dá erro na hora de gravar os dados.
Segue o erro.
Initial SessionFactory creation failed.org.hibernate.MappingException: Repeated column in mapping for collection: br.com.agsisistemas.client.entidade.Dependente.pacientes column: codigo
Exception in thread “main” java.lang.ExceptionInInitializerError
at br.com.agsisistemas.server.dao.HibernateUtil.(HibernateUtil.java:15)
at br.com.agsisistemas.server.dao.GenericDao.add(GenericDao.java:20)
at br.com.agsisistemas.server.RpcProjetoImpl.gravarTipoDependente(RpcProjetoImpl.java:86)
at br.com.agsisistemas.server.TesteConexao.main(TesteConexao.java:35)
Caused by: org.hibernate.MappingException: Repeated column in mapping for collection: br.com.agsisistemas.client.entidade.Dependente.pacientes column: codigo
at org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:329)
at org.hibernate.mapping.Collection.checkColumnDuplication(Collection.java:352)
at org.hibernate.mapping.Collection.validate(Collection.java:309)
at org.hibernate.mapping.Set.validate(Set.java:42)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1139)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1320)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at br.com.agsisistemas.server.dao.HibernateUtil.(HibernateUtil.java:12)
… 3 more
meu mapeamento:
@ServerOnly
@ManyToMany
@AccessType(value="field")
@JoinTable(name="dependente", 
	joinColumns={@JoinColumn(name="codigo")},
	inverseJoinColumns={@JoinColumn(name="codigo")})
private Set<Paciente> pacientes;
Obrigado.
         
        
        
           
           
           
         
         
            
            
          
       
      
        
        
          O nome da tabela está errado… não é a tabela dependente. seria sua muitos para muitos.
Coloca aki o script da tabela muito para muitos pra eu ver.
Valeu.