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.