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

Managed nesse caso?

Oi boa tarde,

No caso abaixo ele atualiza, pois ele continua managed pelo fato de não ter fechado o entity manager?

      public static void main(String[] args) {

        Conta conta = new Conta();
        conta.setTitular("Leonardo");
        conta.setBanco("Caixa Economica");
        conta.setAgencia("123");
        conta.setNumero("456");

        JpaUtil jpaUtil = new JpaUtil();
        EntityManager em = jpaUtil.newEntityManager();

        em.getTransaction().begin();
        em.persist(conta);
        em.getTransaction().commit();

        em.getTransaction().begin();
        conta.setAgencia("456");
        em.getTransaction().commit();

        em.close();
        jpaUtil.closeEntityManagerFactory();
    }
4 respostas

Felipe ele atualiza ou salva no banco?

Porque achei estranho o EntityManager atualizar para você sem você usar o metodo merge.

Para atualizar, não seria algo como.

 em.getTransaction().begin();
        em.persist(conta);
        em.getTransaction().commit();

        em.getTransaction().begin();
        Conta contaBuscada = 
        em.find(Conta.class,CodigoQueVocêTaBuscano);
        contaBuscada.setTitulo("45464");
        em.merge(contaBuscada);
        em.getTransaction().commit();

        em.close();
        jpaUtil.closeEntityManagerFactory();

Boa tarde,

Então nesse caso ele atualizou. Queria saber se nesse caso após fechar a primeira transação e fazer a alteração e comitar na segunda se ele continua no estado managed. Pelo que entendi sim, mas queria confirmar.

Sim Felipe está managed porque já está no banco de dados, todos objetos que estão no banco de dados salvo ou atualizado estão em estado managed

solução!

Então esse é o ponto. O fato de estar no banco de dados não necessariamente é managed, pois poderia ser detached. Minha dúvida é se ao fechar a primeira transação ele fica detached ou permanece managed. Pelo que entendi só fica detached se fechar o EntityManager, ou seja, fechar só a transação não o torna detached.