Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

O objeto conta não está em Detached?

O código funciona perfeitamente só tenho uma dúvida.

O objeto conta ao meu entender está em estado de Detached, mas quando adiciono a conta a uma movimentação funciona perfeitamente.

Um objeto Detached não deveria funcionar sendo relacionado a um objeto Managed correto? Ou entendi errado alguma coisa?

Não tem nada de errado com o código só queria esclarecer esta dúvida, Segue em anexo o código:

package br.com.caelum.financas.teste;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Calendar;

import javax.persistence.EntityManager;

import br.com.caelum.financas.modelo.Categoria;
import br.com.caelum.financas.modelo.Conta;
import br.com.caelum.financas.modelo.Movimentacao;
import br.com.caelum.financas.modelo.TipoMovimentacao;
import br.com.caelum.financas.util.JPAUtil;

public class TestaMovimentacoesComCategoria {
    public static void main(String[] args) {

        Conta conta = new Conta();
        conta.setId(2);

        EntityManager em = new JPAUtil().getEntityManager();

        Categoria categoria1 = new Categoria("Viagem");
        Categoria categoria2 = new Categoria("Negócios");

        Movimentacao movimentacao1 = new Movimentacao();
        movimentacao1.setData(Calendar.getInstance()); //Pega a data de hoje
        movimentacao1.setDescricao("Viagem á MG");
        movimentacao1.setTipo(TipoMovimentacao.SAIDA);
        movimentacao1.setValor(new BigDecimal("200.0"));
        movimentacao1.setCategoria(Arrays.asList(categoria1, categoria2));
        movimentacao1.setConta(conta);

        Movimentacao movimentacao2 = new Movimentacao();
        movimentacao2.setData(Calendar.getInstance()); //Pega a data de hoje
        movimentacao2.setDescricao("Viagem á SC");
        movimentacao2.setTipo(TipoMovimentacao.SAIDA);
        movimentacao2.setValor(new BigDecimal("600.0"));
        movimentacao2.setCategoria(Arrays.asList(categoria1, categoria2));
        movimentacao2.setConta(conta);

        em.getTransaction().begin();

        em.persist(categoria1);
        em.persist(categoria2);

        em.persist(movimentacao1);
        em.persist(movimentacao2);

        em.getTransaction().commit();
        em.close();
    }

}
2 respostas
solução!

Não tem problema usar um detached com um managed, quando precisa fazer um relacionamento :).

Relacionamento neste caso seria a inserção das chaves estrangeiras?