Estou desenvolvendo no netbeans uma pequena aplicação desktop usando spring + hibernate + swing sem jpa sou novo em hibernate e tenho pesquisado um pouco sobre criteria encontrei posts recentes falando sobre essa api, quando começo a implementar o código usa a seguinte linha de comando Criteria criteria = mySessionFactory.getCurrentSession().createCriteria(Produto.class); o metodo createCriteria fica tachado sabe com uma linha sobre oq esta escrito como se o método não estivesse mais em uso ta certo isso mesmo ??? esse método não e mais usado ?
obrigado
Bom, primeiramente, JPA é a especificação da parte de persistencia do Java, e o hibernate implementa ele. Ou seja, se está usando hibernate, a chance de você estar usando JPA é grande.
meu session vem org.springframework.orm.hibernate5.LocalSessionFactoryBean o e criteria vem org.hibernate.Criteria;
Estou dando uma olhada na documentação que nosso amigo
Mas sinceramente nao estou entendendo nada. caso queira usar criteria posso usar javax.persistence.criteria mas qual vai ser a boa pratica pra usar hibernate com spring ?
Usar Criteria é uma boa prática, pois permite encontrar o erro em momento de compilação, além de trabalhar diretamente com objetos Java. Evite o máximo o uso de native queries.
Como disse, JPA é especificação, se vc usar o criteria do javax.persistence.criteria, vc irá utilizar ainda hibernate, pois essa é a biblioteca que você está usando, e o hibernate implementa o JPA. Por isso que disse que muito possivelmente você está usando JPA em algum lugar.
Minha aplicação usa 2 bancos, configurados diretamente no spring. A base firebird como e uma base em produção fiquei com receio de usar hibernate achei melhor usar JDBCTemplate, já a mysql e uma base nova estou criando tudo no hibernate mesmo. vou tentar seguir a documentação e usar criteria pelo javax.persistence. Achei esse artigo Example do Hibernate mas ele usa o método em questão que esta deprecated (depreciado). Obrigado a todos vou esperar um pouco pra colocar como resolvido no post pro caso de alguém quiser comentar mais alguma coisa obrigado mais uma vez a todos
Não sei se entendi bem, voce disse que são dois bancos, sendo que Firebird vai continuar com JDBCTemplate, então sobra 1 banco. Porque prefere usar Hibernate ao invés do próprio JDBC template? Que é muito mais leve e sem essas complicações de query por Criteria do Hibernate.
Então JDBCTemplate e legal e tudo facilita bastante mas como nunca trabalhei com hibernate decidi sair da zona de conforto e aprender uma coisa nova. assim no momento esta sendo um pouco difícil estou achando confuso usar criteria Native SqlQuerys me parece mais simples não sei se por ser similar ao sql mas e bom aprender por mais difícil que seja. E assim acredito que ninguém vai desenvolver uma coisa pra tornar mais trabalhoso geralmente e pra facilitar
Native SQL Query é SQL da mesma forma, mas através do Hibernate. Não é “Criteria” no contexto de query em cima de objetos para depois a ferramenta gerar SQL automaticamente. Apesar de achar uma aberração, se quer realmente aprender ORM/Hibernate, teria que estudar query em cima de objetos, como CriteriaQuery e HQL. SQL é muito mais prático mesmo, mas se é para usar SQL, melhor usar JDBC puro ou até mesmo esse JDBCTemplate que você usa.
Em situações simples tanto faz, mas quando você trabalhar em um sistema com funcionalidades complexas, vai ver o quanto é mais prático e eficiente trabalhar diretamente com SQL, no caso de um banco de dados relacional. Mas para aprendizado de Hibernate, vai ter que aprender Criteria ou HQL sim.
sinceramente achei muito mais fácil HQL não vi vantagens no Criteria talvez por ser buscas simples mas uma coisa que senti falta foi da função Random. Dei uma pesquisada e vi umas pessoas fazendo gambiarra pra resolver isso.
Ta certo e isso mesmo ?
No programa que estou desenvolvendo caso um determinado produto não esteja disponível o sistema oferece outro produto escolhido randomicamente. Pesquisei um pouco e vi usas sugestões para resolver esse problema. como trazer a lista completa do banco e usar a função random do java.alguma coisa agora não me lembro ou passando parâmetros específicos diretamente pra compor o sql que o criteria ou HQL vai montar.
Com SQL diretamente é fácil, usando order by com a funcao rand() e limit, no caso de MySql. Como deseja usar HQL, tem que pesquisar como conseguir gerar esse SQL por intermédio desta linguagem de ORM, pois o recurso de fato existe diretamente no banco via SQL sem gambiarras.