SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
   
Hibernate Query Language
&
Hibernate Criteria Queries
Walter Itamar Mourão
walter.mourao@gmail.com
   
Hibernate Tools
● Plugin Eclipse, componente do JBoss Tools
● Editores, ferramentas para engenharia reversa e 
prototipação de queries.
   
HQL
● Hibernate Query Language: linguagem de consulta 
baseada em SQL, porém com extensões para suportar 
classes.
● Indicado quando a query é estática (relatórios, por 
exemplo).
Ex.:
select g.id from Grupo g where g.descricao like 'A%'
from Usuario u join u.grupo
from Usuario u where u.grupo.descricao like 'A%'
   
Palavras chave
● Derivadas do SQL
● Não diferenciadas por maiúsculas/minúsculas (mas 
as classes e atributos são !)
   
Palavras chave: from
A query mais simples do HQL:
from <classe> [apelido]
retorna todas as instâncias daquela classe. 
Ex:
from br.ita.finep.icammh.domain.ResultadoColeta
from br.ita.finep.icammh.domain.ResultadoColeta rc
   
Palavras chave: select
Seleciona objetos e propriedades a serem 
retornados no result set:
select <objetos.propriedades> from …
Ex:
select rc.id, rc.nomeArquivo 
from 
br.ita.finep.icammh.domain.ResultadoColeta rc
   
Palavras chave: where
Acrescentra condições para filtragem do result set:
select … from … where <condição>
Ex:
select rc.id, rc.nomeArquivo 
from 
br.ita.finep.icammh.domain.ResultadoColeta rc
where rc.id>20
   
Outras Palavras chave
● order by: ordenação do result set
● group by: agrupamento do result set
Ex:
select tamanho from 
br.ita.finep.icammh.domain.CampoParametro 
group by tamanho
   
Junções Implícitas
● Objetos visíveis podem ser referenciados 
diretamente.
Ex:
select rc.coleta.nome, rc.coleta.tipoColeta.nome
from 
br.ita.finep.icammh.domain.ResultadoColeta rc
where rc.id < 200
   
Junções Explícitas
● Use a palavra chave join para explicitar a junção e 
definir apelidos
Ex:
select col.nome, col.tipoColeta.nome
from 
br.ita.finep.icammh.domain.ResultadoColeta rc
join rc.coleta col
where rc.id < 200
   
Funções de agregação
● avg(...), sum(...), min(...), max(...)
● count(*)
● count(...), count(distinct ...), count(all...)
Ex:
select avg(rc.id) from 
br.ita.finep.icammh.domain.ResultadoColeta rc
   
Expressões suportadas em
condições
● Operadores matemáticos: +, ­, *, /
● Comparadores lógicos: =, >=, <=, <>, !=, like, in, 
not in, between, is null, is not null, is empty, is 
not empty, member of and not member of
● Operações lógicas: and, or, not
● Parenteses indicando agrupamento: ( )
● Case: case ... when ... then ... else ... end
   
Expressões suportadas em
condições
● Concatenação de strings: ||,  concat(...,...)
● Expressões temporais: current_date(), 
current_time(), and current_timestamp(), 
second(...), minute(...), hour(...), day(...), 
month(...), year(...)
● Expressões EJB­QL 3.0: substring(), trim(), 
lower(), upper(), length(), locate(), abs(), sqrt(), 
bit_length(), mod(), coalesce(), nullif()
● Conversões para string: str()
   
Expressões suportadas em
condições
● Conversão de tipo: cast(... as ...), extract(... from ...)
● Parâmetros posicionais e nomeados: ?, :nomePar
● Operações em coleções: [any, some, all, exists] 
elements(), indices(), size(), minelement(), 
maxelement(), minindex(), maxindex(), 
● Qualquer função suportada pelo SQL do BD 
destino: sign(), trunc(), rtrim(), sin() 
   
Subqueries
● Subqueries são suportadas em bancos de dados que 
suportam subqueries.
Ex:
from br.ita.finep.icammh.domain.Coleta col
where col.id in 
(select af.id from 
br.ita.finep.bdhr.domain.AgenciaFinanceira af) 
   
Interface Query
● Regras de retorno no result set:
● Se não existe cláusula select
● Se a cláusula from referencia uma única classe, cada 
linha do result set é uma instância dessa classe.
● Se a cláusula from referencia mais de uma classe, o 
result set é composto por Object[] onde cada entrada 
é uma instância de cada classe referenciada.
● Se existe a cláusula select
● Com um único elemento, cada linha do result set é 
uma instância desse elemento.
● Com vários elementos, cada linha do result set é um 
Object[] onde cada entrada é uma instância de cada 
elemento.
   
Retornando Instâncias de
VOs
● É possível criar instâncias de value objects 
diretamente no HQL: 
select new <ClasseVO>(...) from …
Ex:
select new 
br.ita.finep.icammh.sad.common.PerfilVO(p.id,
p.nome)
from br.ita.finep.icammh.domain.Perfil p
   
Outros retornos
● O result set pode ser um um list, usando­se 
“select new list(...)”
● O result set pode ser um map, usando­se 
“select new map(...)”
   
Update & Delete
● Sintaxe semelhante ao SQL: ( update | delete) 
[from] EntityName (where <condições>)
Ex:
delete br.ita.finep.icammh.domain.Coleta col 
where col.id > 2000000
update br.ita.finep.icammh.domain.Coleta col set 
col.nomeArquivo=:novoNomeArquivo where 
col.id > 2000000
   
Interface Query
● O HQL é executado a partir de uma instância de 
org.hibernate.Query, obtida da instância do Session
Query query = session.createQuery("from Book");
List books = query.list();
…
Query query = session.createQuery("from Book");
Iterator itBooks = query.iterate();
...
Query query = session.createQuery("from Book where isbn=:isbn");
query.setString("isbn", "1932394419");
Book book = (Book) query.uniqueResult();
   
Parâmetros
● Parâmetros podem ser passados com a notação '?' ou ':'
...
Query query = session.createQuery("from Book where isbn = ?");
query.setString(0, "1932394419");
Book book = (Book) query.uniqueResult();
**** atenção: o primeiro parâmetro é o 0, diferentemente do SQL***
…
Query query = session.createQuery("from Book where isbn = :isbn");
query.setString("isbn", "1932394419");
Book book = (Book) query.uniqueResult();
● Usando o método query.setProperties, um JavaBean pode ser passado 
como parâmetro. Os getters serão usados para atribuir valores aos 
parâmetros da query.
   
Performance HQL
● Métodos que influenciam na performance:
...
query.setFirstResult(20);
...
query.setMaxResults(10);
...
query.setFetchSize(100);
● O método uniqueResult retorna o objeto único que a query 
retorna, null se o result set é vazio, ou dispara a exceção 
NonUniqueResultException caso o result set retorne 
mais de uma instância.
   
Queries nomeadas
● Pode­se colocar as queries dentro dos arquivos de 
mapeamento (*.hbm.xml), atribuindo nomes.
Ex:
<hibernate­mapping>
<query name="Book.by.isbn">
<![CDATA[from Book where isbn = ?]]>
</query>
</hibernate­mapping>
…
Query query = session.getNamedQuery("Book.by.isbn");
query.setString(0, "1932394419");
Book book = (Book) query.uniqueResult();
   
HQL & Andromda
● Para escrever queries HQL diretamente no modelo, 
crie um método na <<Entity>> marque­o como 
“Query” e escreva a query no valor etiquetado 
@andromda.hibernate.query
● Os parâmetros do método devem ter o mesmo nome 
dos parâmetros dentro da query.
● Pode­se retornar um Collection ou uma classe 
específica, nesse caso o método uniqueResult() da 
interface org.hibernate.Query é usado.
   
Hibernate Criteria Queries
● Mecanismo de consultas 100% Java.
● Indicado para situações onde a query deve ser 
criada dinamicamente.
● A sessão corrente retorna instâncias da Criteria 
através do método createCriteria.
Ex:
Criteria criteria = session.createCriteria(Book.class)
List books = criteria.list();
Equivale a:
Query query=session.createQuery(“from Book”);
List books = query.list();
   
Restrições
● Restrições são acrescentadas através de factories da 
classe org.hibernate.criterion.Restrictions
Ex:
Criteria criteria=
session.createCriteria(br.ita.finep.icammh.domain.Perfil.class);
criteria.add(Restrictions.ilike("nome","P%"));
criteria.list();
   
Expressões Lógicas
● Podem ser expressas com Restrictions.and, 
Restrictions.or ou Restrictions.conjunction e 
Restrictions.disjunction.
Ex:
Criteria criteria=
session.createCriteria(
br.ita.finep.icammh.domain.Perfil.class);
Disjunction dj=Restrictions.disjunction();
dj.add(Restrictions.le("id",10L));
dj.add(Restrictions.ge("id",50L));
criteria.add(dj);
criteria.list();
   
Ordenação
● Use o método addOrder e a classe 
org.hibernate.criterion.Order para ordenar o 
resultado
Ex:
Criteria criteria=session.createCriteria(
br.ita.finep.icammh.domain.Perfil.class);
criteria.add(Restrictions.ilike("nome","P%"));
criteria.addOrder(Order.desc("id"));
criteria.list();
   
Associações
● O método createCriteria permite a inclusão de 
associações na consulta
Ex:
Criteria criteria=session.createCriteria(
br.ita.finep.icammh.domain.PerfilCampos.class);
criteria.add(Restrictions.lt("id",10L));
Criteria critPerfil=criteria.createCriteria("perfil");
critPerfil.add(Restrictions.ilike("nome","P%"));
criteria.list();
   
Associações usando
apelidos
● Pode­se criar apelidos para as associações com o 
método createAlias
Ex:
Criteria criteria=session.createCriteria(
br.ita.finep.icammh.domain.PerfilCampos.class);
criteria.add(Restrictions.lt("id",10L));
criteria.createAlias("perfil","p");
criteria.add(Restrictions.ilike("p.nome","P%"));
criteria.list();
   
Agrupamentos
● Projeções e agrupamentos são criados com o 
método setProjection e com a classe 
org.hibernate.criterion.Projections
Ex:
Criteria criteria=session.createCriteria(
br.ita.finep.icammh.domain.PerfilCampos.class);
criteria.add(Restrictions.lt("id",10L));
criteria.setProjection(Projections.rowCount());
criteria.list();
   
Criteria desacoplada da
sessão
● A classe org.hibernate.criterion.DetachedCriteria 
permite a criação de consultas desacopladas da 
sessão
Ex:
DetachedCriteria dc=DetachedCriteria.forClass(
br.ita.finep.icammh.domain.PerfilCampos.class);
dc.add(Restrictions.lt("id",10L));
dc.getExecutableCriteria(session).list();
   
Performance
● Métodos que influenciam na performance:
...
criteria.setFirstResult(20);
...
criteria.setMaxResults(10);
...
criteria.setFetchSize(100);
● O método uniqueResult retorna o objeto único que a 
consulta retorna, null se o result set é vazio, ou dispara a 
exceção NonUniqueResultException caso o result set 
retorne mais de uma instância.
   
Criteria & Andromda
● Use o estereótipo <<Criteria>> para criar classes 
que representem consultas na persistência
   
Criteria & Andromda
● O cartucho Hibernate gera uma classe Search para 
facilitar a criação de consultas no código Java, e 
os DAOs gerados contém métodos para a 
execução dessas consultas.
Ex:
   
SQL
● Use o método Session.createSQLQuery para 
executar queries SQL.
Ex:
SQLQuery qry=
session.createSQLQuery(“select * from PERFIL”);
List lst=qry.list();
   
Dicas
● A classe SessionFactoryUtils tem métodos 
utilitários em geral, inclusive para retornar a 
sessão Hibernate atual
   
Hibernate & Jasper Reports
● O Jasper Reports suporta HQL de forma nativa
● O Jasper Reports pode receber um Collection de 
beans como base de dados para o relatório, 
portanto pode­se um passar o resultado da 
execução de uma Criteria (ou de uma 
<<Criteria>>)
   
Referências
● http://docs.jboss.org/hibernate/stable/core/api/
● http://www.hibernate.org/hib_docs/v3/reference/en­
US/html/

Mais conteúdo relacionado

Mais procurados

Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso Java
Regis Magalhães
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
Rogério Moraes de Carvalho
 

Mais procurados (10)

Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso Java
 
Reflections
ReflectionsReflections
Reflections
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e Técnicas
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidades
 
Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...
 
Java 01
Java 01Java 01
Java 01
 
Curso de Java (Parte 1)
Curso de Java (Parte 1)Curso de Java (Parte 1)
Curso de Java (Parte 1)
 

Destaque

Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernate
Agenor Neto
 
Edu 5818 tugasan 1 instructional supervision
Edu 5818 tugasan 1 instructional supervisionEdu 5818 tugasan 1 instructional supervision
Edu 5818 tugasan 1 instructional supervision
Indra Maniam
 
Strategic media presentation (approaved)
Strategic media presentation (approaved)Strategic media presentation (approaved)
Strategic media presentation (approaved)
Neeraj Mahajan
 
The reference interview in a digital reference environment
The reference interview in a digital reference environmentThe reference interview in a digital reference environment
The reference interview in a digital reference environment
ipl2: Information You Can Trust
 
Puzzle Purse
Puzzle PursePuzzle Purse
Puzzle Purse
Joshvan
 
二十一世紀醫療照護的新價值平台
二十一世紀醫療照護的新價值平台二十一世紀醫療照護的新價值平台
二十一世紀醫療照護的新價值平台
calex.com
 
Smar tube intro & faqs
Smar tube intro & faqsSmar tube intro & faqs
Smar tube intro & faqs
Neeraj Mahajan
 

Destaque (20)

Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernate
 
JPA com Hibernate
JPA com HibernateJPA com Hibernate
JPA com Hibernate
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotações
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Introdução ao JPA com Hibernate
Introdução ao JPA com HibernateIntrodução ao JPA com Hibernate
Introdução ao JPA com Hibernate
 
Sergio Figueiras / InnovaSuMMa and PRIS projects: Health innovation through p...
Sergio Figueiras / InnovaSuMMa and PRIS projects: Health innovation through p...Sergio Figueiras / InnovaSuMMa and PRIS projects: Health innovation through p...
Sergio Figueiras / InnovaSuMMa and PRIS projects: Health innovation through p...
 
Edu 5818 tugasan 1 instructional supervision
Edu 5818 tugasan 1 instructional supervisionEdu 5818 tugasan 1 instructional supervision
Edu 5818 tugasan 1 instructional supervision
 
Manel Cascallo / VCN Biosciences open innovation case
Manel Cascallo / VCN Biosciences open innovation case Manel Cascallo / VCN Biosciences open innovation case
Manel Cascallo / VCN Biosciences open innovation case
 
2014 fsi presentation
2014 fsi presentation2014 fsi presentation
2014 fsi presentation
 
Bianca Pop / TRANSBIO: Biotransformation of by-products from fruit and vegeta...
Bianca Pop / TRANSBIO: Biotransformation of by-products from fruit and vegeta...Bianca Pop / TRANSBIO: Biotransformation of by-products from fruit and vegeta...
Bianca Pop / TRANSBIO: Biotransformation of by-products from fruit and vegeta...
 
Strategic media presentation (approaved)
Strategic media presentation (approaved)Strategic media presentation (approaved)
Strategic media presentation (approaved)
 
Motivequest on Micro-marketing
Motivequest on Micro-marketingMotivequest on Micro-marketing
Motivequest on Micro-marketing
 
The reference interview in a digital reference environment
The reference interview in a digital reference environmentThe reference interview in a digital reference environment
The reference interview in a digital reference environment
 
Wonderfull World
Wonderfull WorldWonderfull World
Wonderfull World
 
Puzzle Purse
Puzzle PursePuzzle Purse
Puzzle Purse
 
二十一世紀醫療照護的新價值平台
二十一世紀醫療照護的新價值平台二十一世紀醫療照護的新價值平台
二十一世紀醫療照護的新價值平台
 
Using Clicker 5
Using Clicker 5Using Clicker 5
Using Clicker 5
 
Smar tube intro & faqs
Smar tube intro & faqsSmar tube intro & faqs
Smar tube intro & faqs
 
X Te
X TeX Te
X Te
 
Socialmediaplan
SocialmediaplanSocialmediaplan
Socialmediaplan
 

Semelhante a Hibernate avançado-hql-criteria

T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
Carlos Santos
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
Carlos Santos
 
Apresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéApresentação Banco de Dados - Caché
Apresentação Banco de Dados - Caché
Renzo Petri
 
Plsql - Conceitos Básicos
Plsql - Conceitos BásicosPlsql - Conceitos Básicos
Plsql - Conceitos Básicos
Danilo Braga
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo Antlr
Campus Party Brasil
 

Semelhante a Hibernate avançado-hql-criteria (20)

T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Introdução JavaScript e DOM 2016
Introdução JavaScript e DOM 2016Introdução JavaScript e DOM 2016
Introdução JavaScript e DOM 2016
 
TDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código JavaTDC2016SP - Kotlin 1.0: Evolua seu código Java
TDC2016SP - Kotlin 1.0: Evolua seu código Java
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber Funciona
 
Kotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex MagalhaesKotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
Kotlin - Evolua seu código Java (TDC-2016) Alex Magalhaes
 
Apresentação Banco de Dados - Caché
Apresentação Banco de Dados - CachéApresentação Banco de Dados - Caché
Apresentação Banco de Dados - Caché
 
Plsql - Conceitos Básicos
Plsql - Conceitos BásicosPlsql - Conceitos Básicos
Plsql - Conceitos Básicos
 
Introdução ao GraphQL
Introdução ao GraphQLIntrodução ao GraphQL
Introdução ao GraphQL
 
PL/SQL - Conceitos Básicos
PL/SQL - Conceitos BásicosPL/SQL - Conceitos Básicos
PL/SQL - Conceitos Básicos
 
Cloudformation
CloudformationCloudformation
Cloudformation
 
Poo Aula 02
Poo Aula 02Poo Aula 02
Poo Aula 02
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Criando operators para Kubernetes usando Go - v2
Criando operators para Kubernetes usando Go - v2Criando operators para Kubernetes usando Go - v2
Criando operators para Kubernetes usando Go - v2
 
Tag Libraries e JSTL
Tag Libraries e JSTLTag Libraries e JSTL
Tag Libraries e JSTL
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Usp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo AntlrUsp Ufba Ferramentas Analizo Antlr
Usp Ufba Ferramentas Analizo Antlr
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 

Hibernate avançado-hql-criteria