Bem pessoal, toh desenvolvendo alguns testes pra aplicação Desktop em java Ide Netbeans e com banco Postgresql, fazendo tudo na “unha”, comandos SQL, meus formularios tao rodando legalzinho, mas quando uso o danado do Hibernate ai o negocio complica. Em uma aplicação com cerca de 50 tabelas, soh pra começar para abrir o banco o “treen” tah demorando quase um minuto e meio, “acho que toh fazendo alguma coisa errada mas não sei o que???”, na unha consigo navegar pelos resultset da vida sem nenhum problema na nos criteria da vida, eh um deus nos acuda.
Ainda não peguei o jeito!
8 Respostas
Seu post praticamente não dá detalhes do problema, desse jeito é difícil ajudar. Mas, se fosse chutar, diria que a sua dificuldade é a seguinte:
- Você está lendo uma tabela qualquer;
- Essa tabela tem chaves estrangeiras;
- Para cada registro dessa tabela, e para cada chave estrangeira, o Hibernate está fazendo um SELECT em busca do registro correspondente àquela chave estrangeira.
Há uma boa discussão sobre isso no link abaixo:
Moral da história: cuidado com seus JOIN’s… Eu, pessoalmente, prefiro usar HQL em vez de Criteria, acho que os JOIN’s ficam mais explícitos.
Seu post praticamente não dá detalhes do problema, desse jeito é difícil ajudar. Mas, se fosse chutar, diria que a sua dificuldade é a seguinte:
- Você está lendo uma tabela qualquer;
- Essa tabela tem chaves estrangeiras;
- Para cada registro dessa tabela, e para cada chave estrangeira, o Hibernate está fazendo um SELECT em busca do registro correspondente àquela chave estrangeira.
Há uma boa discussão sobre isso no link abaixo:
Moral da história: cuidado com seus JOIN’s… Eu, pessoalmente, prefiro usar HQL em vez de Criteria, acho que os JOIN’s ficam mais explícitos.
Roger brigadu, mas vamos por partes, primeiro porque na abertura do meu banco de dados no sistema com Hibernate tah demorando um monte de tempo, e em SLQ, o bichin abre rapidinho, como contornar isso?
Sugiro a seguinte experiência para verificar quanto tempo o Hibernate está gastando para abrir o banco: edite seu arquivo de configuração hibernate.cfg.xml e comente TODOS os mapeamentos de classe, para que não sejam analisados. (Se você estiver usando anotações infelizmente não sei como ajudar, nunca usei essa técnica). Assim, ao iniciar o Hibernate, você saberá exatamente quanto tempo foi usado na abertura do banco, já que a análise dos mapeamentos costuma demorar um pouco.
Comparar a “abertura=acesso” JDBC com Hibernate pode não ser muito justo.
Pois a utilização do Hibernate envolve vários procedimentos ao “abrir=acessar” o banco de dados, um importante é aquele que verifica se o seu mapeamento realmente reflete a estrutura de dados que está no banco, depois tem o cache, tem o pool de conexões e por ai vai.
Portanto muita calma nesta hora.
flws
Matou a charada, eh isso, ueh sera que não vou poder issar isso???
Gente do ceu, como mapear minhas classes sem perder esse tempao todo, sera que existe outra tecnica para criar a tao falada “fabrica”?? Em teoria eh lindhio mas quando vc passa pra pratica o negocio eh outro, mas continuo achando que existe uma outra saida, soh que não sei o que eh
Comparar a “abertura=acesso” JDBC com Hibernate pode não ser muito justo.Pois a utilização do Hibernate envolve vários procedimentos ao “abrir=acessar” o banco de dados, um importante é aquele que verifica se o seu mapeamento realmente reflete a estrutura de dados que está no banco, depois tem o cache, tem o pool de conexões e por ai vai.
Portanto muita calma nesta hora.
flws
Fantomas, como voce resolve uma situação dessas, toh meio perdidao, olha o Hibernate eh show de bola, mas ficar travado 2 minutos na abertura do sistema e coisa quase que impensavel neste momento.
Então carcara,
O que eu quiz dizer é que talvez vc não tenha muito o que fazer para reduzir esse tempo.
Fiquei curioso, por que esses 2 minutos inicais são tão importantes?
Talvez se vc incluir no post a configuração do hibernate ( hibernate.cfg.xml ) poderia nos ajudar a ter alguma idéia.
Qual a configuração da máquina onde a execução é lenta? Pouca memória por ser um problema.
flws
Então carcara,O que eu quiz dizer é que talvez vc não tenha muito o que fazer para reduzir esse tempo.
Fiquei curioso, por que esses 2 minutos inicais são tão importantes?
Talvez se vc incluir no post a configuração do hibernate ( hibernate.cfg.xml ) poderia nos ajudar a ter alguma idéia.
Qual a configuração da máquina onde a execução é lenta? Pouca memória por ser um problema.
flws
Seguinte, este eh um sistema legado, e quando agente tah resscrevendo o mesmo oce nem veh o que tah acontecendo, dias desses meus colegas foram ver o que tava acontecendo com em minha maquina, cara horrivel, desmarquei todos os mapeamentos no meu cfg, a pra abrir a aplicação 2 minutos, ai, pinta todo tipo de conversinha, ah tah parado, ha vc faz na unha hibernate tu tah longe, e confesso que me senti down pra caramba e o pior de tudo eh que como jah foi tido acho que não tenho muita altenativa com essa situação no mapeamento não.