Porque não utilizar Criteria?  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
mausexdd
Virtual Machine Man
[Avatar]

Membro desde: 29/10/2010 17:49:43
Mensagens: 505
Localização: Araraquara São Paulo
Offline

Estava lendo este artigo do mballem
http://mballem.wordpress.com/2012/01/09/consultas-com-hibernate-e-a-api-criteria-%E2%80%93-parte-i/

sobre criteria , e vi que é muito simples utilizar esta API , que traz vários métodos prontos .
Quando eu estava aprendendo Hibernate , me foi apresentado as HQL como único modo de consultas no BD etc..

E me ficou a duvida , porque não utilizar Criteria ?
perde-se algum beneficio gerido pelo framework utilizando esta API?

Achei o Hibernate mais simples e facil ainda do que ele já é utilizando estes recursos do Criteria.

VLW

Oracle Certified Professional Java Programmer

Software Developer in Project Kenai - HP12c Emulator


Studyng for OCWCD (:

ARE YOU LEARNING JSF ? WACTH THIS NOW !

Hibernate/JSF2.0+Primefaces - Web Cast/Video Tutorial

www.Mauricio-Carvalho.Blogspot.com
[Email] [WWW]
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1695
Offline

Pode usar a API Criteria tranquilamente.

Vejo sendo largamente utilizada em projetos, embora em situações mais complexas eu prefira usar HQL por me sentir mais produtivo nesses cenários.
filipechaves
JavaChild

Membro desde: 26/09/2008 08:19:29
Mensagens: 128
Offline

Na teoria, se consegue os mesmos resultados utilizando HQL ou criteria. O que acontece, na minha opinião, é que a "familiaridade" entre o HQL e o SQL o torna mais "confortável" e "intuitivo" para o uso, por que não há como negar que o criteria é uma quebra de paradigma e, na maioria dos casos, não é intuitivo.

Forte, Aguerrido e Bravo!
NHRC
www.nhrc.com.br
[Email]
mausexdd
Virtual Machine Man
[Avatar]

Membro desde: 29/10/2010 17:49:43
Mensagens: 505
Localização: Araraquara São Paulo
Offline

Outra coisa , eu sempre declarei minhas HQL dentro das classes modelo , sempre me perguntei se não seria melhor passar a HQL direto no método no DAO .

Oracle Certified Professional Java Programmer

Software Developer in Project Kenai - HP12c Emulator


Studyng for OCWCD (:

ARE YOU LEARNING JSF ? WACTH THIS NOW !

Hibernate/JSF2.0+Primefaces - Web Cast/Video Tutorial

www.Mauricio-Carvalho.Blogspot.com
[Email] [WWW]
filipechaves
JavaChild

Membro desde: 26/09/2008 08:19:29
Mensagens: 128
Offline

mausexdd wrote:Outra coisa , eu sempre declarei minhas HQL dentro das classes modelo , sempre me perguntei se não seria melhor passar a HQL direto no método no DAO .


qual modelo? não entendi.

Forte, Aguerrido e Bravo!
NHRC
www.nhrc.com.br
[Email]
rafael_souza0
Thread.start()
[Avatar]

Membro desde: 19/09/2011 20:19:21
Mensagens: 32
Localização: São Paulo
Offline

Eu prefiro usar Criteria somente em consultas realmente avançadas, em que precise fazer diversos joins.

Criteria é bem mais facil de usar, mas na maioria das vezes, prefiro usar HQL pq acho mais confiável. Já tive alguns problemas de retornos estranhos usando a Criteria.

Oracle Certified Professional, Java SE 6 Programmer

[MSN]
filipechaves
JavaChild

Membro desde: 26/09/2008 08:19:29
Mensagens: 128
Offline

filipechaves wrote:
mausexdd wrote:Outra coisa , eu sempre declarei minhas HQL dentro das classes modelo , sempre me perguntei se não seria melhor passar a HQL direto no método no DAO .


qual modelo? não entendi.



agora acho que entendi, seria camada model do MVC ?

pense assim, se tu precisar achar o local que faz a query, qual seria primeira classe que tu procuraria?
geralmente todo código de interação com o banco é escrito no DAO.

Forte, Aguerrido e Bravo!
NHRC
www.nhrc.com.br
[Email]
mausexdd
Virtual Machine Man
[Avatar]

Membro desde: 29/10/2010 17:49:43
Mensagens: 505
Localização: Araraquara São Paulo
Offline

agora acho que entendi, seria camada model do MVC ?

pense assim, se tu precisar achar o local que faz a query, qual seria primeira classe que tu procuraria?
geralmente todo código de interação com o banco é escrito no DAO.


É então , é realmente isso que pensei , porem meu professor disse que nao era elegante passar a HQL direto como parametro no metodo que vai realizar a função no BD , e sim passar somente o nome da HQL

Oracle Certified Professional Java Programmer

Software Developer in Project Kenai - HP12c Emulator


Studyng for OCWCD (:

ARE YOU LEARNING JSF ? WACTH THIS NOW !

Hibernate/JSF2.0+Primefaces - Web Cast/Video Tutorial

www.Mauricio-Carvalho.Blogspot.com
[Email] [WWW]
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1695
Offline

mausexdd wrote:
agora acho que entendi, seria camada model do MVC ?

pense assim, se tu precisar achar o local que faz a query, qual seria primeira classe que tu procuraria?
geralmente todo código de interação com o banco é escrito no DAO.


É então , é realmente isso que pensei , porem meu professor disse que nao era elegante passar a HQL direto como parametro no metodo que vai realizar a função no BD , e sim passar somente o nome da HQL


De uma olhada em NamedQueries.
mausexdd
Virtual Machine Man
[Avatar]

Membro desde: 29/10/2010 17:49:43
Mensagens: 505
Localização: Araraquara São Paulo
Offline

Então eu passava apenas o NamedQueri para a classe DAO , acho que não fui muito especifico , o caso é que ao invés de declarar minhas HQL na classe PessoaDAO por exemplo , ele falava para declarar na classe Pessoa , e chamar pelo NamedQuerie dentro do método nas classes de Persistencia (DAO).

This message was edited 1 time. Last update was at 24/01/2012 13:27:29


Oracle Certified Professional Java Programmer

Software Developer in Project Kenai - HP12c Emulator


Studyng for OCWCD (:

ARE YOU LEARNING JSF ? WACTH THIS NOW !

Hibernate/JSF2.0+Primefaces - Web Cast/Video Tutorial

www.Mauricio-Carvalho.Blogspot.com
[Email] [WWW]
Tchello
GUJ Master
[Avatar]

Membro desde: 07/06/2008 14:41:04
Mensagens: 1695
Offline

mausexdd wrote:Então eu passava apenas o NamedQueri para a classe DAO , acho que não fui muito especifico , o caso é que ao invés de declarar minhas HQL na classe PessoaDAO por exemplo , ele falava para declarar na classe Pessoa , e chamar pelo NamedQuerie dentro do método nas classes de Persistencia (DAO).


Exato, quem deve saber a Query ou (nesse caso) a NamedQuery é o DAO, que por sua vez está declarada na entidade correspondente.
renanreismartins
GUJ Ranger
[Avatar]

Membro desde: 19/09/2007 15:19:38
Mensagens: 807
Localização: São Paulo - SP
Offline

concordo com o Tchello que hql parece mais produtivo em algumas vezes.

porém acho criteria mais vantajoso quando temos que montar uma query dinamicamente. Com ela podemos evitar concatenaçao e repetição de if.

abrasssss

http://renanreismartins.blogspot.com/ - Para apaixonados por desenvolvimento de software
[WWW] [MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team