Página Inicial do Fórum > Banco de Dados - JDBC / SQL

Hibernate Lento



Criar novo tópico   Responder tópico


  1. adriano_cm
    Posts:110


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Galera... to com uma duvida
    fiz uma persistencia usano Hibernate 3 e usando banco de dados Oracle 9i
    mas to achando muito lento as transações de dados
    o Hibernate é tão lento assim mesmo?




  1. jack_-_ganzha
    Posts:4191


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Pode ser rapido ou lento, depende de como vc fez as configurações. Que tal mostrar algumas para nós vermos?

    valeuz...
    _________________
    Marcos Silva Pereira




  1. adriano_cm
    Posts:110


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    esse aqui é meu hibernate.cfg.xml


    esse aki é um dos xml que mapeam as tabelas do oracle



    e esse aki é a classe DAO que tem as funções da castro, atualização etc...




  1. TriTonE
    Posts:1576


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Em vez de criar o SessionFactory em cada método, tente criar o objeto SessionFactory uma única vez e deixar o mesmo objeto compartilhado para que todos os métodos utilizem este objeto para obter a Session.

    E quanto à abertura de Sessão e Transação nos métodos de manipulação dos dados, isso vai impossibilitar você de utilizar mais de um método de manipulação (INSERT, UPDATE, etc) dentro de uma única transação..

    []'s
    _________________
    Daniel F. Martins




  1. adriano_cm
    Posts:110


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    bem... intaum to ferrado hehe
    pq issu é tipo um sistema administrativo onde o cara se loga
    lista algumas coisas, atualiza outras, cadastra novas coisas
    se foi oque eu intendi, se eu abrir o factory 1 vez nom posso
    por exemplo me logar no sistema (um select) e depois atualizar
    um cadastro (update) em seguida?




  1. olisses
    Posts:162


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    TriTonE

    E quanto à abertura de Sessão e Transação nos métodos de manipulação dos dados, isso vai impossibilitar você de utilizar mais de um método de manipulação (INSERT, UPDATE, etc) dentro de uma única transação..



    Você pode dar um exemplo de como trabalhar com o Hibernate e apenas uma transação acessando varios DAOs? Eu não to conseguindo encontrar.
    O unico que eu encontrei usava interceptor e eu não tava querendo usar. Gostaria de fazer algo que ficasse transparente (não estragasse o DAO).
    _________________
    JavaFree.org




  1. TriTonE
    Posts:1576


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Pode sim. É que nos testes que eu fiz, a criação de um SessionFactory demora consideravelmente, já que o Hibernate lê o arquivo de configuração e tal..

    O problema está também na delimitação da transação do banco de dados em cada método do seu DAO. O que pode acontecer é que você precise implementar alguma funcionalidade que exija atualizar várias tabelas e, se uma das atualizações falhar, todas as operações feitas anteriormente (dentro da mesma transação) sejam canceladas.. isso por causa do beginTransaction e commit, dentro de cada método do seu DAO.

    []'s
    _________________
    Daniel F. Martins




  1. TriTonE
    Posts:1576


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    olisses
    Você pode dar um exemplo de como trabalhar com o Hibernate e apenas uma transação acessando varios DAOs? Eu não to conseguindo encontrar.
    O unico que eu encontrei usava interceptor e eu não tava querendo usar. Gostaria de fazer algo que ficasse transparente (não estragasse o DAO).


    O "problema" é como delimitar o escopo das transações, mas isso pode ser feito utilizando o Spring, por exemplo. Eu não possuo nenhum exemplo aqui mostrando esse tipo de implementação já que estou aprendendo também .. comprei o livro Pro Spring e comecei a ler essa semana, e estou bastante otimista quanto ao framework!

    Mas, voltando ao assunto, o primeiro passo para isso é retirar todos os beginTransaction/commit/rollback dos métodos dos DAOs.. com isso, você pode fazer com que vários DAOs sejam utilizados dentro de uma única unidade lógica de trabalho.

    []'s
    _________________
    Daniel F. Martins




  1. ronaldtm
    Posts:2317


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Além do problema do escopo das transações, o seu código está abrindo e fechando a sessão dentro do DAO, então você não vai conseguir usar o lazy-loading depois do retorno do método.
    _________________
    In fact, people who study design methods without also practicing design are almost always frustrated designers who have no sap in them, who have lost, or never had, the urge to shape things. Such a person will never be able to say anything sensible about "how" to shape things either. (Christopher Alexander)




  1. ronaldtm
    Posts:2317


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Ah, e sobre a instância única da SessionFactory, uma forma fácil (mas não necessariamente a melhor) é criar uma classe singleton que guarda esta instância. Se você não sabe o que é singleton, pesquise.

    Segundo a própria documentação do Hibernate, a classe SessionFactory é thread-safe, então não há problema em compartilhá-la entre múltiplas requisições/threads. Sua inicialização é extremamente pesada, então este esquema de chamar buildFactory em cada chamada é completamente inapropriado.
    _________________
    In fact, people who study design methods without also practicing design are almost always frustrated designers who have no sap in them, who have lost, or never had, the urge to shape things. Such a person will never be able to say anything sensible about "how" to shape things either. (Christopher Alexander)




  1. TriTonE
    Posts:1576


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    O Hibernate in Action apresenta uma aplicação de exemplo de como desenvolver utilizando o Hibernate. Você pode encontrá-la para download no link:

    http://caveatemptor.hibernate.org/[/url]

    Se não me engano, nesta aplicação existe uma classe chamada HibernateUtils, que mostra um modelo de classe utilitária para utilizar o Hibernate.

    Talvez ajude

    []'s
    _________________
    Daniel F. Martins




  1. Relacionados





Novo tópico   Responder tópico     Índice do forum -> Banco de Dados - JDBC / SQL