Hibernate desespero

Galera, por favor, me ajudem, jah não sei mais o que fazer!!!

A meses tento usar o Hibernate, sigo tudo quanto eh tutorial na net mas naum dá… sempre que executo a aplicação os dados naum são salvos no banco.

Algum problema em especial usando ele com o MySQL(tabelas InnoDB)???

Tipo qnd executo a aplicação ela mostra soh uma mensagem:

“resolvi” esse problema copiando o arquivo log4j.properties do proprio hibernate dentro da minha aplicação, soh que depois disso ele mostra uma msg gigante que eh assim:

Pelo que pude entender por essa msg eh que o erro esta em:

alguma coisa a ver com esse ehcache, mas o q eu não sei. jah andei procurando na net, mas não achei nada.
Por favor, me deem uma luz, jah estou desesperado com isso

Opa, ae galera finalmente consegui…
num tinha nada a ver com o ehcache não, era soh que eu naum tinha usado uma transaction no hora de inserir, agora finalmente deu certo (tow usando o Hibernate 3).
Agora soh uma duvida, notei que eh meio lento a persistencia no banco… isso eh pq o Hibernate eh meio lento mesmo? ou simplemente tow fazendo algo que torne o processo mais lento?
Grato desde jah :slight_smile:

O Hibernate mapeia todo os seus objetos quando estânciado pela primeira vez por isso a demora, mas para garantir que ele seja rápido é necessário que vc implemente um pattern Singleton, isso fará que ele seja estanciado apenas uma vez em seu sistema.

e como eu faço pra aprender mais sobre essa pattern? se possivel vc teria algum exemplo pra me mostrar?

http://www.google.com.br/search?hl=pt-BR&q=singleton+%2B+example&btnG=Pesquisa+Google&meta=

Melhor que o singleton, no caso do hibernate, acredito que seja o ThreadLocal. Entra em www.hibernate.org e procura por ThreadLocal e por HibernateUtils, q eh a implementacao de uma classe utilitaria utilizando o conceito de ThreadLocal. Com isso vc nao vai criar uma sessão toda hora q precisar usar (o q torna o codigo lento), vai criar a sessao e deixá-la numa thread separada, e toda vez q precisar, vai usar essa thread. Mas para poder usar varias sessões ao mesmo tempo precisará de um pool, q pode ser configurado no hibernate.properties, ta comentado lá, eh soh dar uma olhada. Recomendo o pool da apache DBCP

O Singleton é um dos patterns, na minha opnião, mais fáceis. Não conheço o outro, mas sei que para implementar o singleton é extremamente rápido.

Quanto a esse ThreadLocal, vc já o usou em alguma outra aplicação Darkseid? Se eu tiver diversas máquinas acessando meu banco não faria com que este fique lento também?

UAHUahUAHuahUAHuah

[quote=“RaulCarlin”]O Singleton é um dos patterns, na minha opnião, mais fáceis. Não conheço o outro, mas sei que para implementar o singleton é extremamente rápido.

Quanto a esse ThreadLocal, vc já o usou em alguma outra aplicação Darkseid? Se eu tiver diversas máquinas acessando meu banco não faria com que este fique lento também?[/quote]

Nao faria nao, pq vc faz um pool… o q acontece eh q vc nao vai criar uma sessao toda vez q precisar a usar. Uma vez fiz uma “medição” de desempenho com o hibernate, e criar sessão eh algo muito pesado, ainda mais se tiver com log habilitado. Usando ThreadLocal, vc cria a sessao a primeira vez, e depois vai usando a q ja esta criada. Caso vc precise usar a sessao quando ela estiver sendo usada, ai eh criada outra e colocada no pool…

hmmm vou dar uma olhada depois… achei interessante…

Alguém de vocês assina SQL Magazine? A nova (com a capa do SQL Reporting Services) saiu com um mini curso sobre Hibernate… legalzinho o negócio…

[quote=“pintowar”]Opa, ae galera finalmente consegui…
num tinha nada a ver com o ehcache não, era soh que eu naum tinha usado uma transaction no hora de inserir, agora finalmente deu certo (tow usando o Hibernate 3).
Agora soh uma duvida, notei que eh meio lento a persistencia no banco… isso eh pq o Hibernate eh meio lento mesmo? ou simplemente tow fazendo algo que torne o processo mais lento?
Grato desde jah :)[/quote]

Amigo! estou exatamente com este seu problema! onde foi q vc colocou esta transaction?

public void insert(Gerente gerente) throws Exception {
Session session = factory.openSession();
session.save(gerente);
session.flush();
session.close();
}

Opa,

[code] public void insert(Gerente gerente) throws Exception {

Session session = factory.openSession();

//----------------------------------------------------

Transaction tran = session.beginTransaction();

//----------------------------------------------------

session.save(gerente);
session.flush();
session.close();
}

[/code]

[quote=“Reifel”]Opa,

[code] public void insert(Gerente gerente) throws Exception {

Session session = factory.openSession();

//----------------------------------------------------

Transaction tran = session.beginTransaction();

//----------------------------------------------------

session.save(gerente);
session.flush();
session.close();
}

[/code][/quote]

Amigo muito obrigado! eu passei uma semana querendo fazer isso e so consegue com dica. eu fiz assim.

   public void insert(Gerente gerente) throws Exception {
      Session session = factory.openSession();
      Transaction tx = null;
      try {
         tx = session.beginTransaction();
         session.save(gerente);
         tx.commit();
      } catch (Exception e) {
         if (tx != null)
            tx.rollback();
         throw e;
      } finally {
         session.flush();
         session.close();
      }
   }

De nada! :joia:

Quer ver um portal usando strus + hibernate 2?

www.sipcam.com.br

Todo conteudo e imagens está gravado em banco em banco…
Ah… usamos thread local.

O que acham, muito lento? razoável? normal?