Porque não utilizar Criteria?

11 respostas
mausexdd

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

11 Respostas

Tchello

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.

F

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.

mausexdd

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 .

F

qual modelo? não entendi.

rafael_souza0

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.

F

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.

mausexdd

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

Tchello

mausexdd:
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

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).

Tchello

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

renanreismartins

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

Criado 24 de janeiro de 2012
Ultima resposta 24 de jan. de 2012
Respostas 11
Participantes 5