Salvando em tabelas relacionadas, pelo Hibernate

3 respostas
rockstom

Pessoal, eu tenho o seguinte código que está funcionando perfeitamente, ele salva na primeira, na segunda e na terceira tabela, aonde a primeira e a segunda está ligada na terceira, porém isso só funciona se eu cadastrar tudo de uma vez, mas se por exemplo a primeira tabela já tivesse os dados de que eu preciso, que argumentos eu iria passar para a terceira tabela pra saber que aquele dado pertence a ela?

import Entidades.ContasPag;
import Entidades.Fornecedor;
import Entidades.TipoDoc;
import Util.HibernateUtil;
import java.math.BigDecimal;
import java.util.Date;
import org.hibernate.Session;

public class Teste2 {

    public static void main(String[] args) {
        
        Session s = null;
        
        try {

Primeira tabela

TipoDoc doc = new TipoDoc();
            doc.setDescTipoDoc("Duplicata");

Segunda tabela

Fornecedor forn = new Fornecedor();
            forn.setCidForn("Goiânia");
            forn.setCnpjForn("00000000");
            forn.setEnderecoForn("Rua 15");
            forn.setDescForn("asdf");
            forn.setTelForn1(null);
            forn.setTelForn2(null);
            forn.setUfForn("Goiás");

Terceira tabela

ContasPag cont = new ContasPag();
            cont.setDataLanc(new Date(2012-03-12));
            cont.setDataVenc(new Date(2012-04-03));
            cont.setSitContp(new Boolean(false));
            cont.setValorContp(new BigDecimal("25.36"));
            cont.setFornecedor(forn);
            cont.setTipoDoc(doc);
            
            s = HibernateUtil.getSessionFactory().getCurrentSession();
            s.beginTransaction();
            s.save(doc);
            s.save(forn);
            s.save(cont);
            s.getTransaction().commit();
            
            System.out.println("Dados salvos com sucesso!");
            
        } catch (Exception erro) {
            System.out.println(erro);
            s.getTransaction().rollback();
        }
    }
}

3 Respostas

Milton_Quirino

Boa tarde rockstom,

Se a primeira tabela ja tem um registro que ja possui os dados que voce precisa para passar para a 2 e 3 tabela você tem que buscar esse registro e depois inseri-lo no saved, por exemplo :

TipoDoc d = new TipoDoc();
d = em.find(TipoDoc.class, id);

Depois voce so chama ele na hora de salvar :

s.save(d);  
    s.save(forn);  
    s.save(cont);

Espero ter ajudado e nao ter falado nenhuma besteira hehehe, mas qualquer coisa alguem me corrige =)

rockstom

Não deu certo não, o registro foi duplicado.

Diguinho.Max

acredito que ao invés de vc mandar salvar novamente um dado que já exista no banco, creio que deveria fazer um update. tente fazer

detalhe lembrado que vc deve recuperar e setar os objetos das outras duas tabelas dentro da 3.
s.update(TerceiraTabela).

pois o update ele verifica se já existe o objeto, casso exista ele só atualiza os dadas.

espero ter ajudado.

obs.: acho que uma verificação antes de mandar salvar poderia ajudar tb.

if(doc.getId() == null && forn.getId() == null){
        s.save(doc);
        s.save(forn);
        s.save(cont);
   }else{
        s.update(cont);
   }
Criado 9 de março de 2012
Ultima resposta 9 de mar. de 2012
Respostas 3
Participantes 3