8
respostas

A função persist() não funciona

Pessoal, fiz todas as configurações informadas e aparentemente está tudo certo.

Consigo exercutar selects nas minhas tabelas, entretanto quando tento inserir ou atualizar algum registro, não funciona. O estranho é que não dá nenhum erro.

Quando executo um select, aparece meu SQL no console, mas o persist() não aparece o INSERT.

public class AnaliseDAO {

    @Inject
    private EntityManager em;

        public Analise salvar(Analise analise) {
            em.persist(analise);
            return analise;
        }
}

O que poderia ser?

8 respostas

boa tarde José, tenta anotar sua classe com @Transactional por favor, senão der, poste seu persistence.xml

abraços

Olá, eu já tinha colocado o @Transactional mas não funcionou.

Estou usando o Hibernate 4.1.9.Final.

persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="dbapm">

        <provider>org.hibernate.ejb.HibernatePersistence</provider>    

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/apm" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />
            <property name="javax.persistence.validation.mode" value="none"/>

            <!-- <property name="hibernate.hbm2ddl.auto" value="update" /> -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />

        </properties>

    </persistence-unit>
</persistence>

Aparentemente o xml está ok, tenta abrir uma transação e commitar na mão:

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

Você está commitando a sua transação?? Ele só ta sendo esta sendo persitido e nao commitado, colocar assim que devera adicionar.

public class AnaliseDAO {

    @Inject
    private EntityManager em;

        public Analise salvar(Analise analise) {
         em.getTransaction().begin();
        em.persist(analise);
        em.getTransaction().commit();
            return analise;
        }
}

FUNCIONOU!!! Muito obrigado!

Mas tenho uma dúvida, não teria como ficar automático esse commit? Ou não é uma boa prática?

Na verdade tem, só que tu colocou a anotação errada, seria @PersistenceContext, em cima do EntityManager.

Oi José Ricardo, tudo bem?

Cuidado ao fazer isso! Se você usar esse EntityManager depois de comitar a transação terá problemas.

Dá uma olhadinha nessa aula: https://cursos.alura.com.br/course/jpa-avancado/task/2692

Abraços!

Oi José Ricardo,

Conseguiu resolver seu problema?

Abraços!