Objeto não é persistido no Banco de Dados

1 resposta
J

Estou com uma aplicação que não persiste os dados no Banco de Dados Postgres 8.2.

To utilizando JPA(eclipseLink).

Não é disparada nenhuma exceção, mas o objeto não é persistido no banco de dados. A aplicação consegue realizar consultas sem problemas, mas não consegue persistir objetos.

Segue os fontes:
persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" 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">
  <persistence-unit name="WebApplication2PU" transaction-type="JTA">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jndiPostgres</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
      <property name="eclipselink.logging.level" value="FINE"/>
    </properties>
  </persistence-unit>
</persistence>

JMSTeste.java

@Named(value="JMSEnvio")
@Dependent
public class JMSEnvio {
public void TestarPersistencia() {
        List<Cadastro> cads = new CadastroDAOJPA2().recuperarTodos();
        System.out.println("Qtde de registros recuperados: " + cads.size());

        Cadastro novo = new Cadastro();
        novo.setIdCadastroGeral(555);
        novo.setIdCadastroLocal(1111111);
        novo.setNome("FUNCIONARIO");
        novo.setRg("99999");

        new CadastroDAOJPA2().insereRegistro(novo);

        List<Cadastro> cads2 = new CadastroDAOJPA2().recuperarTodos();
        System.out.println("Qtde de registros recuperados 2: " + cads2.size());
    }

}

CadastroDAOJPA2.java

public class CadastroDAOJPA2 extends DAOBaseJPA2<Cadastro> implements CadastroDAO {

        private EntityManager em;

	@Override
	protected EntityManager getEntityManager() {
            if (em == null) {
                EntityManagerFactory emf = Persistence.createEntityManagerFactory("WebApplication2PU");
                em = emf.createEntityManager();
            }
            return em;
	}

	@Override
	protected Class<Cadastro> getClasseDominio() {
		return Cadastro.class;
	}

        public void insereRegistro(Cadastro reg) {
            getEntityManager().persist(reg);
            System.out.println("INSERIU");
        }

DAOBaseJPA2

public abstract class DAOBaseJPA2<T extends ObjetoPersistente> implements DAOBase<T>, Serializable {
	protected abstract EntityManager getEntityManager();

	protected abstract Class<T> getClasseDominio();

        public List<T> recuperarTodos() {
        EntityManager em = getEntityManager();
        CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
        cq.select(cq.from(getClasseDominio()));
        return em.createQuery(cq).getResultList();
    }
}

Agradeço muito a quem puder me dar essa ajuda.

Obrigado.

1 Resposta

D

Talvez esteja falyando commitar sua transação:

em.getTransaction().begin()
//Presisti o objeto
em.getTrnsaction().commit();

Mas não está apresentando nenhum erro ao persistir?

Ou então suas tabelas estão criadas toda vez que sua transação é encerrada.
Após gerar as tabelas tente remover esta linha:

&lt;property name="eclipselink.ddl-generation" value="create-tables"/&gt;
Criado 26 de outubro de 2010
Ultima resposta 26 de out. de 2010
Respostas 1
Participantes 2