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

Dúvida do Estado

Fiquei em dúvida do motivo pelo qual isso aqui deu certo:

Conta conta = new Conta();

        conta.setId(4);

        Movimentacao movimentacao = new Movimentacao();
        movimentacao.setData(Calendar.getInstance());
        movimentacao.setDescricao("Conta de Manutencão do Carro");
        movimentacao.setTipoMovimentacao(TipoMovimentacao.SAIDA);
        movimentacao.setValor(new BigDecimal("565.36"));
        movimentacao.setConta(conta);

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

        manager.getTransaction().begin();

        manager.persist(movimentacao);

        manager.getTransaction().commit();

        manager.close();

Não entendi porque o código funcionou, sendo que eu usei o PERSIST na conta, e ela estando detached, e não managed. Por exemplo, se eu quiser remover uma conta, preciso usar o método FIND do manager instanciado, agora para criar uma query na tabela movimentação, que se relaciona com conta (e essa precisa persistir também), não tem necessidade?

2 respostas
solução!

Não, não tem. Você deu persist na movimentacao, não na conta. Essa é aquela dúvida boa, vc já entendeu o que precisa ser feito :).

Entendi! Meu código ali possui uma linha "esquecida", que era:

manager.persist(conta);

Quando rodei sem a mesma vi que deu certo, e verifiquei que no exercício em questão está sendo criada uma nova conta com um novo movimento ao mesmo tempo, por isso a necessidade de logicamente persistir a conta.

No entanto, para somente atribuir uma movimentação a alguma conta, somente preciso atribuir o ID a instância de um objeto conta criado, e setar a conta da movimentação a ela.