Spring + Hibernate Duvida sobre criteria

Bom dia a todos

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.

Sobre o createCriteria, pelo que vi na documentação, ele não está depreciado.
https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Criteria.html
O que vc quis dizer com tachado?

Segue imagem da captura de tela

já ao JPA como só configurei o spring com as propriedades do hibernate e estou criando os DAO acredito que não tenha nada que eu tenha escrito em JPA

obrigado pelo link da documentação vou dar uma lida

Hummm de fato isso é sinal de deprecated (depreciado).
De onde vem sua session e seu Criteria? Qual é o import deles?

De qualquer forma, no Javadoc não te dá instruções de qual usar para substituir o createCriteria?

A partir da versão 5 a Criteria esta depreciada, agora é javax.persistence.criteria.CriteriaQuery

conforma a documentação

http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#criteria

{ },s.

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 ?

melhor usar Native SqlQuerys ?

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.

É muito mais prático usar SQL, se teu sistema atende 1 SGDB relacional.

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.

Porque ? já estou olhando Criteria depois vou dar uma pesquisada sobre HQL

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.

Ola Galera desculpa a demora em responder tenho andado meio ocupado .

Deu uma estudada na documentação do Hibernate ORM 5.2.9 e criei 2 trechos de código que basicamente faz a mesma coisa trazer todos os produtos

public List procuraCriteria(EstoqueProdutoFiscal estoqueProdutoFiscal){

    EntityManager entityManager = mySessionFactory.createEntityManager();
    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<EstoqueProdutoFiscal> criteria = builder.createQuery(EstoqueProdutoFiscal.class);
    Root<EstoqueProdutoFiscal> root = criteria.from(EstoqueProdutoFiscal.class);
    criteria.select(root);
    
    
return entityManager.createQuery(criteria).getResultList();
}
public List<EstoqueProdutoFiscal> procuraHQL(EstoqueProdutoFiscal estoqueProdutoFiscal){
   
return mySessionFactory.getCurrentSession().createQuery("Select e from EstoqueProdutoFiscal e").list();

}

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 ?

Entre HQL ou Criteria ai já é questao de escolha, tem prós e contras, mas eu não gosto de ambas.

Sobre “Random”, o que voce quer fazer na prática pro usuário?

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.