2
respostas

Persistindo objeto já existente

Olá pessoal,

Como posso persistir um objeto que já existe no meu banco de dados ?

Exemplo:

Quero persistir Pessoa (que não está no banco), mas no objeto Pessoa tem um atributo Endereco (este objeto endereço já existe e está persistido no banco).

Quando persisto Pessoa com seu endereço (passando o codigo do endereço preenchido no objeto endereco) recebo um exceção. Acredito que seja por que na minha tabela endereço codigo é auto-increment.

Qual é a pratica para resolver este problema ? Como posso dizer para o JPA que dados iguais não devem ser duplicados ?

Atenciosamente, Leandro

2 respostas

Oi Leandro, tudo bem ?

Você precisa passar um objeto gerenciado pela jpa para salvar.

Fora isso, você precisa indicar o relacionamento que existe, ai isso vai fazer com que no seu banco seja gerada uma chave estrangeira que evita criar novos objetos.

Olá Leandro.

Como você disse você já tem o endereço cadastrado no banco de dados. Então tudo o que você precisa fazer é buscar esse endereço do banco e setar ele dentro da classe Pessoa, via construtor ou set.

Por exemplo

public class PessoaView{

    private EntityManager manager = new JPAUtil.getEntityManager();

    public void cadastraPessoaComEndereco(){
        //abre a transação
        manager.getTransaction().begin();

        // Busca endereço do banco
        int idDoEndereco = 1;
        manager.find(Endereco.class, idDoEndereco);

        //Cadastra a pessoa
        Pessoa pessoa = new Pessoa(idDaPessoa, "Nome da Pessoa" , endereco);

        //Persiste no banco.
        manager.persist(pessoa);

        //faz o commit e fecha a o entity manager.
        manager.getTransaction().commit();
        manager.close();
    }
}

Espero ter ajudado.