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();
}
}