Hibernate, demora na persistencia! [RESOLVIDO]

12 respostas
danielfigueiredoc

Pessoal boa tarde,

Eu começei com o Hibernate, gerei os entities, configurei e funciona tudo certinho, o problema é que quando estou na minha página e aciono um botão ele carrega toda vez umas informação de entities e namedquery’s entre outras coisas pra depois entrar no método que estou chamando no meu ManagedBean.
Ai fica impossível, deve estar faltando alguma configuração que eu não sei e não consegui achar na net.

o que ele exibe é o seguinte:

INFO: Binding entity from annotated class: br.com.entity.VendasEstoque INFO: Bind entity br.com.entity.VendasEstoque on table vendas_estoque INFO: Binding entity from annotated class: br.com.entity.Nivel INFO: Bind entity br.com.entity.Nivel on table nivel INFO: Binding entity from annotated class: br.com.entity.Usuarios INFO: Bind entity br.com.entity.Usuarios on table usuarios INFO: Binding entity from annotated class: br.com.entity.Menu INFO: Bind entity br.com.entity.Menu on table menu INFO: Binding entity from annotated class: br.com.entity.Vendas INFO: Bind entity br.com.entity.Vendas on table vendas INFO: Binding entity from annotated class: br.com.entity.Tarefa INFO: Bind entity br.com.entity.Tarefa on table tarefa INFO: Binding entity from annotated class: br.com.entity.Clientes INFO: Bind entity br.com.entity.Clientes on table clientes INFO: Binding entity from annotated class: br.com.entity.Produtos INFO: Bind entity br.com.entity.Produtos on table produtos INFO: Binding entity from annotated class: br.com.entity.Estoque INFO: Bind entity br.com.entity.Estoque on table estoque INFO: Mapping collection: br.com.entity.Menu.tarefaList -> tarefa INFO: Mapping collection: br.com.entity.Vendas.vendasEstoqueList -> vendas_estoque INFO: Mapping collection: br.com.entity.Clientes.vendasList -> vendas INFO: Mapping collection: br.com.entity.Produtos.estoqueList -> estoque INFO: Mapping collection: br.com.entity.Estoque.vendasEstoqueList -> vendas_estoque INFO: Hibernate Validator not found: ignoring WARNING: composite-id class does not override equals(): br.com.entity.VendasEstoquePK WARNING: composite-id class does not override hashCode(): br.com.entity.VendasEstoquePK

Lembrando que toda a vez ele carrega essas coisas entreo outras antes de ir pro método q eu chamou, ou seja, o que eu bolei de começar transações, comitar e etc, funciona rápido, como vi no debug, mas msm colocando o breakpoint bem no inicio ele carrega isso tudo toda vez antes de entrar no método, alguém poderia me ajudar!!?!?

Abraços

12 Respostas

walacy

Não é o auto-deploy do servidor que tá rodando não?
Tá rodando direto no eclipse?

danielfigueiredoc

Cara to rodando no netbeans, com o glassfish e Java EE 6.

H

Como você está criando o EntityManager?

walacy

Cara, tenta comentar essa linha se houver no seu “persistence.xml”.

<property name="hibernate.hbm2ddl.auto" value="update"/>
danielfigueiredoc
Então eu criei duas classes uma:
public class HibernateSupport {

    private EntityManagerFactory emf;
    private ThreadLocal<EntityManager> managerThread;
    private ThreadLocal<EntityTransaction> transactionThread;

    public HibernateSupport() {
        emf = Persistence.createEntityManagerFactory("ArmazemPU");
        managerThread = new ThreadLocal<EntityManager>();
        transactionThread = new ThreadLocal<EntityTransaction>();
    }

    protected EntityManager getEntityManager() {
        if (managerThread.get() == null) {
            EntityManager em = emf.createEntityManager();
            managerThread.set(em);
        }
        return managerThread.get();
    }

    protected EntityTransaction getEntityTransaction() {
        if (transactionThread.get() == null) {
            EntityTransaction transaction = getEntityManager().getTransaction();
            transactionThread.set(transaction);
        }
        return transactionThread.get();
    }

    protected void stopOperation() {
        getEntityManager().close();
        transactionThread.remove();
        managerThread.remove();
    }
}
e outra:
public class AbstractManager<T> extends HibernateSupport {

    public AbstractManager() {
        super();
    }

    protected void persist(T instance) {
        getEntityTransaction().begin();
        getEntityManager().persist(instance);
        getEntityTransaction().commit();
    }

    protected T merge(T instance) throws Exception {
        getEntityTransaction().begin();
        instance = getEntityManager().merge(instance);
        getEntityTransaction().commit();
        return instance;
    }

    protected void remove(T instance) {
        getEntityTransaction().begin();
        getEntityManager().remove(instance);
        getEntityTransaction().commit();
    }

}

Dai o managed bean q eu tiver fazendo passa o entity tipado pra persistir e etc.. não sei se ta legal bolei isso hoje
se alguem puder me ajudar

danielfigueiredoc

walacy:
Cara, tenta comentar essa linha se houver no seu "persistence.xml".

&lt;property name=&quot;hibernate.hbm2ddl.auto&quot; value=&quot;update&quot;/&gt;

pior que nao tem essa linha no meu persistence.xml

ele ta assim:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;persistence version="1.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_1_0.xsd"&gt; &lt;persistence-unit name="ArmazemPU" transaction-type="RESOURCE_LOCAL"&gt; &lt;provider&gt;org.hibernate.ejb.HibernatePersistence&lt;/provider&gt; &lt;jta-data-source&gt;JDNIArmazemUNIT&lt;/jta-data-source&gt; &lt;properties/&gt; &lt;/persistence-unit&gt; &lt;/persistence&gt;

Requena

Entao… eu acho que isso ai é output de Debug do hibernate, tenta rodar a aplicação sem ser por Debug só no Run acho que ele para de imprimir esses “INFO:”

H

Toda vez que você precisa de um EntityManager no seu ManagedBean você dá um new HibernateSupport ?
Se sua resposta for sim, o problema está ai.

danielfigueiredoc

Não para, mesmo rodando normal, é exatamente a mesma coisa.

Deopis que ele exibe tudo é instantaneo pra ele gravar no banco.

danielfigueiredoc

henriquejhc:
Toda vez que você precisa de um EntityManager no seu ManagedBean você dá um new HibernateSupport ?
Se sua resposta for sim, o problema está ai.

Cara coloquei denovo e ele passa sim, toda vez ali, o que posso fazer para ele construir apenas uma vez?
porque toda vez q entra o

é null.

H

Você tem que dar uma pesquisa sobre Singleton.
Também já tive esse tipo de problema.
Eu uso assim, vê se te ajuda…

public class MyEntity {
	
    public static String DEFAULT_UNIT_NAME = "namePersistence";
    
    private static EntityManagerFactory emf = null;
    
    public static EntityManager getEntityManager() {
        if( emf == null ){
        	System.out.println("Criando o EntityManagerFactory");
        	init();
        	System.out.println("EntityManagerFactory Criado");
        }
        return emf.createEntityManager();
    }   
    
    private static void init() {
       emf = Persistence.createEntityManagerFactory(DEFAULT_UNIT_NAME);
    }
    
    public static EntityManager getEntityManager(String unitName) {
        if( emf == null ) init(unitName);        
        return emf.createEntityManager();
    }    
    
    private static void init(String unitName) {
        emf = Persistence.createEntityManagerFactory(unitName);
    }
}

Espero ter ajudado.

danielfigueiredoc

Ajudou sim cara, mto obrigado mesmo!!!

Ate mais!

Criado 19 de fevereiro de 2010
Ultima resposta 19 de fev. de 2010
Respostas 12
Participantes 4