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