5
respostas

Tempo de Execução

Não houve melhora no tempo de execução depois que eu crei a classe JPAUtil e isolei a EntityManagerFactory e criei um metodo getEntityManager...

Será que houve só comigo? executei varias vezes pra testar.

private static EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("financas");

    public static EntityManager getEntityManager(){
        return entityManagerFactory.createEntityManager();
    }
EntityManager entityManager = JPAUtil.getEntityManager();
5 respostas

Para a execução do código apenas uma vez, não faz diferença mesmo. A diferença é para quando vc for ter código acessando o banco várias vezes... Pq aí vc não vai precisar ficar criando a factory o tempo todo.

Então só pra entender, isso é uma desvantagem do Hibernate ou JPA em relação ao JDBC no quesito performance?

Conta conta = new Conta(); conta.setTitular("Maria dos Santos"); conta.setBanco("Caixa"); conta.setAgencia("044"); conta.setNumero("54323");

/* Usando HSQLDB */

// EntityManagerFactory emf = Persistence // .createEntityManagerFactory("contas-hsqldb");

/* Usando PostgreSQL */ // EntityManagerFactory emf = Persistence // .createEntityManagerFactory("contas-postgres");

/* Usando MySQL */ double inicio = System.currentTimeMillis();

/* EntityManagerFactory emf = Persistence .createEntityManagerFactory("contas-mysql");

EntityManager em = emf.createEntityManager();*/

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

em.getTransaction().begin();

em.persist(conta);

em.getTransaction().commit(); double fim = System.currentTimeMillis(); System.out.println("Executado em: " + (fim - inicio)/1000 + "s"); //em.close(); double inicio2 = System.currentTimeMillis();

Conta conta1 = new Conta(); conta1.setTitular("Maria dos Santos"); conta1.setBanco("Caixa"); conta1.setAgencia("044"); conta1.setNumero("7794");

em.getTransaction().begin();

em.persist(conta1);

em.getTransaction().commit();

double fim2 = System.currentTimeMillis(); System.out.println("Executado em: " + (fim2 - inicio2)/1000 + "s");

Também não tive melhora no tempo de execução com a referida alteração.

Como foi dito gente, a alteração é para varias execucoes usando a mesma entitymanger factory... nao eh que isolar o codigo deixou mais rapido, nao criar varias vezes eh o que vai dar o ganho de performance.

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