Olá amigos…
Eh o seguinte, na empresa onde trabalho, eu e mais 3 colegas teremos q desenvolver um framework para um projeto num curto espaço de tempo. Eu sou tri a favor de utilizar o hibernate, mas estamos com dúvida no tempo que levaremos para ter um bom apreendizado para utilizado de maneira correta, principalmente em relação as consultas. Outro fator que estamos em dúvida eh em relação a performance, não sabemos se o tempo que o hibernate leva para efetivar uma transação eh maior ou menos do que utilizando DAO do modo convencional.
Gostaria de saber a opinião da comunidade, pois a união faz a força.
Obrigado a todos
o que tem haver vocÊs desenvolverem uma framework com utilizar hibernate?
usar hibernate vai degradar um pouco sua performance, mas irá abstrair e muito a forma como os dados são persistidos.
O aprendizado não vai ser tão demorado…
Creio que em uma semana de pesquisas vocês irão conhecer um pouco.
com no máximo 1 mês vocês estarão cracks!
Olá amigo
Acredito que tenha a haver em utlizar ou não hibernate, pois se não optarmos pelo mesmo, teremos que desenvolver o nosso próprio mecanismo de persistência, sendo que ao contrário poderiamos apenas criar fachadas para comunicação com o hibernate.
Valeu pela sua dica…
Abraços…
Sim…imaginei isso…mas não havia entendido sua colocação por completo.
Veja a sua real necessidade.
Se precisar de uma abstração maior… use o hibernate!
Se precisar de ajuda…estaremos sempre aqui!
Bom, fazer acesso a dados usando DAO é mais rápido q hibernate, mas se vc tiver uma classe de conexao meia boca, acabará perdendo qq vantagem. O Hibernate, apesar de ser um pouco mais lento, oferece pooling de conexões. Da até pra utilizar o DBCP da apache, o q o torna bem rápido. Bom, eu acho inviável criar um framework de persistência, sendo q existem tantos e tao bons no mercado. Mas se o seu medo é qto as consultas, da pra vc usar o IBatis, da uma pesquisada por ele no google, basicamente vc cria um xml para fazer as consultas para vc, da o SQLManager (classe do IBatis) fornece metodos para vc chamar as consultas do xml e devolve na forma de objetos. Da até para fazer lazy loading.
Fica ai a Dica.
Ok, Pessoal novamente agradeço pelas dicas…
Com certeza acredito que com um prazo de tempo curto que consiga fazer um estudo bem legal em cima de todas essas opções…
Mas tirando o deixa, para mim utilizar o pool de conexões eu preciso necessariamante utilizar o arquivo hibernate.cfg.xml ou pode ser o hibernate.properties?
Abraços…
Na realidade, nada impede que um DAO use pool de conexões, faça lazy loading…
A diferença é que isso será feito por você, na mão (ok, você pdoe olhar os ums projetinhos open por aí que talvez façam isso, ou confiar em gambiarras do SGBD).
O Hibernate vai ser mais lento se você contar que ele é mais uma camada entre sua lógica e seu SGBD, mas conhecendo os SQLs que existem por aí, eu diria que no final ele acaba sendo mais rápido por ser melhor otimizado e planejado que os DAOs caseiros. Além disso, mesmo numa aplicação onde seus DAOs sejam lindinhos e limpinhos, dificilmente você terá problemas de performance degradada que possa perceber.
Eu uso Hibernate atualmente num sistema para autenticar consultas à um sistema legado em C, as permissões e informações do cliente ficam em SGBD, esses dados são usados para saber para qual dos três ou quatro sistemas eu devo perguntar por alguns dados de cobrança. O sistema faz 1039 requisições por segundo, segundo nosso último benchmark :mrgreen:
what porra is that?
hehehhe[/quote]
lazy loading é uma espécie de consulta sob demanda.
O hibernate permite que você faça associações de entidades, sejam elas por 1-n ou n-1. Caso você faça este mapeamento, toda vez que buscar por uma entidade, ele trará às outras entidades que estão ligadas à ela.
Parece ser uma maravilha, né? mas é uma merda! Nem sempre precisamos realmente de obter os dados que estão relacionados, mas sempre que consultamos pela entidade, podemos trazer milhares de dados interligados.
Em sistemas mais complexos, onde os relacionamentos entre entidades é muito grande, isto é inviável.
Para resolver isto que o lazy serve. Você traz apenas a entidade principal e, quando seu programa necessitar de um ou outra entidade relacionada, ele fará a carga naquele instante.
Parece bom né? mas não é a 8ª maravilha do mundo.
O maior problema, como o próprio fabricante diz, é que você faz seu controle de exceções para o bloco onde você faz a consulta. Se outra parte da consulta é feita quando você já está na camada de controle, pode ser que seu programa não esteja preparado para tratar uma possivel falha.
Outro problema quanto ao lazy loading no hibernate é na utilização de webservices!
O WS faz a serialização dos dados para poder enviar para a camada de aplicação, e, para isto, necessita acessar os dados relacionados, não permitindo que o lazy funcione como deveria, já que você não lê todos dados no bloco de consulta, mas eles vão ter que ser carregados quando você, serializar os objetos.
Hibernate é muito bom para abstrair o acesso e a persistencia dos dados, mas deve ser utilizado com muito cuidado!
[]`s
Ok pessoal, estou conseguindo esclarecer muitas dúvidas em relação ao hibernate.
Soh na questão do pool ele se dá pelo arquivo cfg.xml ou .properties?
Abraços…
[quote=“dabonoto”]Ok pessoal, estou conseguindo esclarecer muitas dúvidas em relação ao hibernate.
Soh na questão do pool ele se dá pelo arquivo cfg.xml ou .properties?
Abraços…[/quote]
pode ser via properties sem problemas, mas dai vc tera q indicar em tempo de compilação quais classes vc deseja q ele mapeie pra vc, q tbm eh bem facil, é apenas uma linha para cada classe
Ok, darkseid
Se eu não me engano eu já vi algum exemplo assim,
Mas valeu, agora vou dar uma pesquisada…
Obrigado pelas dicas…
Douglas