| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 17:16:11
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
- Lazy loading ?
- Cache ?
- Herança ?
- Não ter que fazer os selects na mão ?
- Referencia cruzada ?
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 17:18:55
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
E desde quando usar Hibernate impede você de usar DAO?
O correto não seria perguntar "Porque usar Hibernate é melhor do que JDBC?"?
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 17:23:40
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
Maurício Linhares wrote:E desde quando usar Hibernate impede você de usar DAO?
O correto não seria perguntar "Porque usar Hibernate é melhor do que JDBC?"?
exatamente o que eu ia falar
uso um DAO para esconder a tecnologia de acesso a dados, o resto do meu sistema não tem que saber se eu uso JDBC ou Hibernate, a unica coisa que entra e sai destes daos são objetos do dominio da aplicação, e de vez em quando uma exceção de acesso a dados (estas o spring mascara pra mim, e faz com que também seja transparente a tecnologia que estou trabalhando )
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 17:27:32
|
Cocota
JavaChild
![[Avatar]](/images/avatar/fdad3b5b2200b598dfde9517e5b426a8.jpg)
Membro desde: 03/04/2006 21:17:41
Mensagens: 149
Localização: Natal-RN
Offline
|
Eh.
Maurício te pegou!
- - - -
Sergio,
Eu tenho um certo domínio de JDBC. Mas acho trabalhoso demais.
O Hibernate tem uma proposta legal de mapeamento O/R. E por isso eu ando estudando essa porra!!!! (ahueheuh)
|
Ez RulEz Até de Madrugada |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 17:29:41
|
keller
GUJ Master
![[Avatar]](/images/avatar/f410588e48dc83f2822a880a68f78923.jpg)
Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline
|
Mas ambos nao usam JDBC?
http://java.sun.com wrote:
Java Database Connectivity (JDBC) API is a standard SQL database access interface.
|
Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 17:32:13
|
tralala
JavaBaby
Membro desde: 31/03/2006 17:31:53
Mensagens: 91
Offline
|
gui wrote:Mas ambos nao usam JDBC?
http://java.sun.com wrote:
Java Database Connectivity (JDBC) API is a standard SQL database access interface.

Sim, ambos usam.
Quando citaram usar JDBC referiam-se em utilizar a API diretamente invéz de utilizando um Frame Work de persistência o qual habistrai ela.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 17:32:59
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Sim, vc pode usar DAO com Hibernate. Verdade.
A pergunta então é porque DAO + HIBERNATE ou HIBERNATE puro é melhor do que DAO + JDBC.
PS: Mudei o título do tópico !
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 17:43:33
|
keller
GUJ Master
![[Avatar]](/images/avatar/f410588e48dc83f2822a880a68f78923.jpg)
Membro desde: 12/11/2003 16:24:00
Mensagens: 1817
Localização: Auckland - NZ
Offline
|
Agora sim!
O que o Hibernate tem a oferecer que é melhor que DAO+JDBC.
Achei um tutorial (tambem fiquei curioso e fui atras) falando dos propositos
do hibernate acho que isso da uma esclarecida em porque usar hibernate é legal..
http://www.laliluna.de/what-is-hibernate.html
Até..
[s]
|
Guilherme I. Keller (Gui)
Diploma in Web Development and Desktop Publishing
SCJA | SCJP | SCWCD | SCBCD | CSM
"Test it, before it test you."
http://flickr.com/guikeller |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 17:52:01
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Better system architecture
When you include all functionality of your application and the access to the database within your dialogs, you will have some severe disadvantages.
It is really difficult to reuse code. You will repeat code at many places. If you change anything it is quite hard to find out all places where you have to add changes.
When you separate your dialogs from your logic and the logic from the persistence mechanism you can more easily apply changes to one part without influencing the other parts.
Dao não serve exatamente pra isso ?
Reduce time for standard DB actions
Most queries in database development are simple ?insert, update, delete? statements. There is no need to develop all these tedious statements. Hibernate helps you save time.
Loading classes from the database looks like
Query query = session.createQuery("select b from Bug as b");
for (Iterator iter = query.iterate(); iter.hasNext()  {
bugs.add((Bug) iter.next());
}
return bugs;
saving a class ?bug? to the database looks like
session.update(bug);
Depois que vc tem o trabalho inicial de fazer o DAO, vc pode usá-lo exatamente como vc usa a session do hibernate.
Advanced features difficult to develop yourself
Caching solutions, transactions and other features Hibernate provides are not so easy to implement. It is actually non sense to develop something which allready exist.
Acho que aqui que está o ponto importante. Funções avançadas.
Caches podem se tornar complicados, principalmente se vc tem concorrencia acessando o cache, transações, timeout, etc. Mas eu diria que em 80% dos casos um cache para evitar que o seu DAO vá ao banco de dados não é nenhum bicho de sete cabeças. Um artigo muito bom sobre isso foi comentado aqui: http://www.guj.com.br/posts/list/26589.java
As outras featues avançadas como transaction, lazy loading, não são nem um pouco avançadas e podem ser obtidas facilmente.
Conclusão (provavelmente errada): Hibernate te ajuda no cache e te economiza ter que escrever os selects dos seus beans.
Sei lá, eu consigo escrever rapidamente os DAOs dos meus beans usando JDBC. Isso pq já estou acostumado com isso. Por isso que não usei Hibernate no mybooks do Mentawai. E não me arrependi até agora...
Por isso tb que o mentawai tem um pacote não documentado chamado org.mentawai.cache, com vários tipos de cache...
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 18:14:14
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Implemente Lazy Loading e queries OO (principalmente polimórficas) facilmente.
LazyLoading de verdade. Tipo todas as ligações telefônicas de uma empresa no ano associadas ao objeto empresa.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 18:22:05
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Implementar um cache é a maior perda de tempo que existe. Eu diria que em 90% das vezes que tive que depurar bugs relacionados a OOM em uma aplicação Java era porque alguém achou que caching era algo trivial.
Fora isso que um software de cache só é viavel de ser desenvolvido se ele for não-transacional, não-coerente e somente leitura.
Caching eu acho que é um das maiores qualidade do hibernate, tenho usado com resultados incríveis cache de entidades, colections e queries.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 18:24:34
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
Figura !!!!!
Empresa Oi tem 3 bilhões de ligação.
Nem vc nem o Hibernate vão poder carregar todas essas ligações numa lista. Seja Lazy Loading, ou seja o que for.
Isso é um problema de tunning de banco de dados, já que terá que haver um belo índice que te permita pegar subsets dessa mundo sem distruir a máquina e/ou parar o banco.
No Oracle tu teria que fazer algo assim:
Daí na próxima paginação tu faria assim:
Tu vai ter que fazer isso na mão para ir pegando de 1000 em 1000.
Como o Hibernate resolve isso ??? Provavelmente em estado padrão, sem maiories configurações, na primeira chamada a getCalls() ele vai tentar puxar tudo do banco e morrer.... hehehehehehe (se não for isso que acontece me perdoem a piadinha...)
Isso é mais uma questão de banco de dados do que de framework de persistencia !!!
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 18:25:04
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Lazy loading não é taao dificil assim shoes, o que eu acho zuado é implementar eager loading, decodificar um resultset com alguns inner e outer join é muito massante.
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 18:31:56
|
saoj
JWizard
![[Avatar]](/images/avatar/2e7ceec8361275c4e31fee5fe422740b.png)
Membro desde: 09/03/2004 23:34:46
Mensagens: 2667
Localização: Chicago, EUA
Offline
|
louds wrote:Lazy loading não é taao dificil assim shoes, o que eu acho zuado é implementar eager loading, decodificar um resultset com alguns inner e outer join é muito massante.
O que é eager loading ???
Qualquer inner join e outer join é pentelho de se fazer. Seja na hora de construir a query seja na hora de pegar os resultados.
Se o Hibernate faz isso automático pra vc então realmente é uma vantagem... o problema são os efeitos colaterais:
geralmente para inner e outer joins saber usar o índice certo é muito importante. Se vc faz isso na mão vc pode facilmente melhorar sua query, forçando o uso de um índice ou outro, etc. Se tu deixa o hibernate fazer isso, então vc ficou na mão do hibernate e/ou terá que partir para configurações avançadas do bicho e/ou comprar o Hibernate bible e/ou contratar do Gavin para te ajudar. (claro que exagerei um pouco, mas o meu medo é esse...)
|
Sergio A Oliveira Jr. - saoj
ExperiMENTA:
Mentawai = http://www.mentaframework.org - Full-stack Java Web Framework com Configuracão Programática
MentaQueue = http://mentaqueue.soliveirajr.com - Queue de alta-performance.
MentaLog = http://mentalog.soliveirajr.com - Non-intrusive, fast, garbage-less, colored and straightforward logging
MentaBean = http://mentabean.soliveirajr.com - Tiny ORM with SQL Builder
MentaRegex = http://mentaregex.soliveirajr.com - Perl-style regex for Java.
MentaContainer = http://mentacontainer.soliveirajr.com - Straightforward IoC, DI e Auto-Wiring
Space4J = http://www.space4j.org - Banco-de-dados de Objetos em Memória
Options-Lib = https://github.com/saoj/options-lib - Ruby classes para ter acesso as opcoes do Yahoo Finance
Selleto = http://www.selleto.com.br
Flipinion = http://www.flipinion.com
Kawai = http://www.kawaiwiki.org
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/04/2006 18:36:09
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
saoj wrote:
louds wrote:Lazy loading não é taao dificil assim shoes, o que eu acho zuado é implementar eager loading, decodificar um resultset com alguns inner e outer join é muito massante.
O que é eager loading ???
Qualquer inner join e outer join é pentelho de se fazer. Seja na hora de construir a query seja na hora de pegar os resultados.
Se o Hibernate faz isso automático pra vc então realmente é uma vantagem... o problema são os efeitos colaterais:
geralmente para inner e outer joins saber usar o índice certo é muito importante. Se vc faz isso na mão vc pode facilmente melhorar sua query, forçando o uso de um índice ou outro, etc. Se tu deixa o hibernate fazer isso, então vc ficou na mão do hibernate e/ou terá que partir para configurações avançadas do bicho e/ou comprar o Hibernate bible e/ou contratar do Gavin para te ajudar. (claro que exagerei um pouco, mas o meu medo é esse...)
Eager loading é o contrario de lazy loading. E só é necessario se preocupar com indicar os índices nas queries se o teu banco de dados for mongoloide e gerar planos muito ruins. DBAs acefalos também vale. Até hoje as únicas vezes que ví precisarem colocar hints de índices nas queries foi quando o modelo de dados era estrupiado além do imaginavel.
|
|
|
 |
|
|