Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
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?
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..
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?
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
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.
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.
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)
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)
adriano_cmPosts:110
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?
jack_-_ganzhaPosts:4191
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
adriano_cmPosts:110
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...
TriTonEPosts:1576
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
adriano_cmPosts:110
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?
olissesPosts:162