JPQL (Java Persistence Query language)
‘Uma query SELECT JPQL ¢ formada pelas cléusulas SELECT e FROM (obrigatérias)
e mais 4 cléusulas opcionais com o seguinte formato
wal
[GROUP BY ... [HAVING ...]
[ORDER 5!
A estrutura das queries DELETE e UPDATE é mais simples:
ETE FROM... [WHERE ...
As keywords JPQL sao case insensitive. Literais de string so também case insensitives.
(Os nomes das entidades Java e dos campos de dados so case sensitive
Exemplo: SELECT p FROM Pessoa AS p
Esta query retribui todos os objetos Pessoa na base de dados. A clausula 4S é opcional
Exemplo equivalente: SELECT p FROM Pessoa p
A cliusula FROM declara uma ou mais varidveis query, designadas variéveis
identificagao, semelhantes 4s variaveis usadas nos ciclos nas linguagens de
programagao. Cada variavel query representa uma iteracdo sobre os objectos na base de
dados. Uma variével query ligada a uma entidade designa-se varidvel range. Uma
-varidvel range define uma iteracao sobre todos os objectos da respectiva entidade e suas
classes descendentes.
Ao contrario das queries em SQL onde o alias de uma tabela é opcional, o uso de
varidveis de identificacto é obrigatério em JPQL. Outra diferenga relativamente a SQL
& quea cliusula SELECT neste exemplo no enumera as colunas da tabela, ou usa *
para seleccionar todas as colunas. Em vez disso s6 a varivel identificagao é listada para
indicar que o tipo de resultado da query ¢ a entidade Pessoa, e no um conjunto de
linhas.
A cliusula SELECT define os resultados da query. O exemplo acima retoma todos os
objectos Pessoa resultantes da iteragiio da varidvel range p, que sio todos os objectos
Pessoa na base de dados.
A varivel identificagao ¢ o ponto de partida para todas as expressdes query. Cada query
deve ter pelo menos uma variivel identificagao definida na clausula FROM, e essa
varidvel deve corresponder a um tipo de entidade. Quando a declaracao de uma variavelidentificagao nao usa uma expressio path (isto , quando é um simples nome de
entidade) essa varidvel é designado por variavel range. Expresses path também
podem definir aliases através de variaveis identificagao, no caso de joins e subqueries.
Cliusula SELECT em JPQL e Criteria API
1, SELECT em Queries JPQL
A query seguinte retoma os objectos Pessoa que passam a ser geridos pelo
EntityManager:
oa> resultados = query.g
Projecao
A query seguinte retorna os nomes das pessoas como instincias String em vez dos
objectos Pessoa:
SELECT p.nome FROM Pessoa AS p
Expressdes path, tais como p. nome, usadas para retornar um subconjunto das
propriedades de uma entidade, designam-se por projeccdes. Os valores dos campos so
extraidos dos objectos entidade (ou projectados a partir dos objectos entidade) para
formar os resultados da query.
Os resultados da query apresentada acima s4o recebidos como uma lista de Strings:
‘TypedQuery a
LECT p.nome
ing> reaultado:
A query seguinte retorma 0 objecto Endereco de uma pessoa especificada
SELECT p.endereco FROM Pe:
a AS p WHERE p.nome
‘A query seguinte retorma a descrigdo do endereco de uma pessoa especificada:
SELECT p.endereco.deser ¥i
ROM. Pe:
soa AS p WHERE p.nome
A cliusula SELECT também pode definir resultados compostos:
s
ECT p.nome, p.endereco.descr FROM Pessca AS pA lista de resultados desta query contém elementos array de Object (Object[]), tendo.
cada array o tamanho 2.
0 cédigo seguinte mostra o processamento dos resultados:
‘TypedQuery