Consultas básicas com critéria

Existente várias maneiras de fazer consultas no mundo java, mas quando utilizando Hibernate/JPA a critéria é uma forte canditada para essa demanda, pois é bem simples de utilizar em consultas básicas e possui um ótimo tratamento para a conversão objeto-relacional.

As critérias são baseadas em Entidades, então é preciso criar uma entidade a qual será consultada.

Entidade.java

@Entity
public class Entidade {
 
    @Id
    private Long id;
...
}
Observação
Para ser considerado uma entidade no JPA é preciso estar anotado com @Entity que consequentemente exigirá um id para sua entidade, o qual o atributo escolhido deve ser anotado com @Id.

Na questão de configuração a critéria precisa de um entityManager para criar sua sessão com o hibernate.

Classe.java

   @PersistenceContext(unitName = "HibernateExemplosPU") 
   private EntityManager entityManager; 
...
Observação
A anotação PersistenceContext foi utilizada para injetar o entityManager com as configurações do persistence unit definido dentro do persistence.xml.

A utilização da critéria é bem simples mas ele possui uma estrutura própria que não nos lembra SQL, mas deixa o código mais orientado.

Classe.java

...
    @SuppressWarnings("unchecked")
    public List<Entidade> criteriaBasica() {
        Session session = (Session) this.entityManager.getDelegate(); 
        Criteria criteria = session.createCriteria(Entidade.class);
        return criteria.list();
    }
   

A critéria a cima executa o seguinte select : SELECT * FROM entidade

  • session : através do entityManager é criado uma sessão do hibernate, pois a critéria é do hibernate;
  • session.createCriteria(Class): a sessão do hibernate possui o método createCriteria(Class) que é uma fabrica de critéria e recebe umas classe que seja uma entidade;
  • criteria.list() : retorna umas lista de objeto com o resultado da consulta;
Observação
O criteria.list() deixa uma warning por isso @SuppressWarnings(“unchecked”) no início do método, mas em tempo de execução o criteria.list() que retorna uma list de objetos faz casting para a lista de entidades esperada.

A critéria possui restrições para suas consultas, que a nível de SQLs é as condições (where, and)

Classe.java

...
    @SuppressWarnings("unchecked")
    public List<Entidade> criteriaBasica() {
        Session session = (Session) this.entityManager.getDelegate(); 
        Criteria criteria = session.createCriteria(Entidade.class);
        criteria.add(Restrictions.eq("id", 1L));
        return criteria.list();
    }
   

A critéria a cima executa o seguinte select : SELECT * FROM entidade WHERE id = 1;

  • criteria.add() : cria uma condição na consultas, o legal da críteria que ele identifica se é um where ou and, ou seja, o programador só vai criando adicionando(.add);
  • Restrictions.eq(“id”, 1L) : cria uma condição de igualdade para o atributo id, ou seja where id = 1;
Observação
O atributo “id” que referencia a propriedade da entidade, deve ser o mesmo nome da entidade e não do banco de dados;
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.