1
resposta

o objeto está no estado Detached mesmo?

O código funcionou, só que me surgiu uma dúvida. Apesar da transação ser encerrada, quando eu testo depois o conta.setSaldo(500.0) teoricamente não era pra alterar, mas o valor do saldo é alterado mesmo estando no estado detached.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("contas");
        EntityManager em = emf.createEntityManager();


        em.getTransaction().begin();
        Conta conta = new Conta();
        conta.setTitular("Márcia 6");
        conta.setNumero(12345);
        conta.setAgencia(54321);
        conta.setSaldo(100.0);
        em.persist(conta);

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

        EntityManager em2 = emf.createEntityManager();
        System.out.println("ID da Conta da Márcia:" + conta.getId());
        conta.setSaldo(500.0);

meu persistence.xml:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">

    <persistence-unit name="contas">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>jpa.modelo.Conta</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <!-- DB Driver -->
            <property name="javax.persistence.jdbc.url"    value="jdbc:postgresql://127.0.0.1:5435/jpaguia" />
            <property name="javax.persistence.jdbc.user" value="postgres" /> <!-- DB User -->
            <property name="javax.persistence.jdbc.password" value="postgre" /> <!-- DB Password -->

        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/> <!-- DB Dialect -->
            <property name="hibernate.hbm2ddl.auto" value="update" /> <!-- create / create-drop / update -->

            <property name="hibernate.show_sql" value="true" /> <!-- Show SQL in console -->
            <property name="hibernate.format_sql" value="true" /> <!-- Show SQL formatted -->

        </properties>

    </persistence-unit>
1 resposta

Olá RPH, tudo bem com você?

Eu testei o seu código e aparentemente não houve problemas quanto ao estado detached, você chegou a testar de novo e deu o mesmo resultado?

Teoricamente, o método close() deveria fechar qualquer conexão com a EntityManager. Então, a não ser que ele fosse chamado no meio de uma transação, a entidade deveria estar no modo detached quando você alterou o saldo para 500.0. Pesquisando também não consegui encontrar nada que apontasse um situação parecida, então sempre há a possibilidade de ser um bug do Eclipse.

Peço desculpas pela demora no retorno. Ainda estamos tentando fazer o possível para atendermos todas as dúvidas do fórum, então se tiver qualquer outra dúvida é só avisar!

Bons estudos!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software