Sunteți pe pagina 1din 4

18/4/2015

JavierFerrandiz|JPQLpararecuperarentidades.

Siempreadelantesin

JavierFerrandiz

precipitacinperosinpausa.

EnterpriseJavaBeans

Hibernate

Spring

SobreM
Buscar

JPQLpararecuperarentidades.

Buscar

Publicadoel14/07/2014porjavier

JPQLPARARECUPERARENTIDADES.
Lospasosbsicosparaejecutarunaconsultajpqlconjpa,sonlossiguientes:
1.ObtenerunainstanciadeunEntityManager

Entradasrecientes

ContenedorSpring
QuesunStatefulSession
Bean?
QuesunStatelessSession

1
2

EntityManagerFactoryentityManagerFactory=Persistence.createEntityManagerFactory("jpapersistenceejercicio3"
EntityManagerentityManager=entityManagerFactory.createEntityManager();

Bean?
IntroduccinSpringMVC
GenericAccessDatacon
Hibernate

2.CrearunainstanciaQuery
1

Queryquery=entityManager.createQuery("SELECTpjFROMProyectopjWHEREpj.codigoProyectoNOTIN(SELECTv.proyecto.codigoProyectoFROMVentav)"
Archivos

septiembre2014
3.Ejecutarlaconsulta

agosto2014
julio2014

List<Proyecto>proyectos=(List<Proyecto>)query.getResultList();

Categoras

4.Recuperarlasentidades
Hibernate
1
2
3
4

for(Proyectoproyecto:proyectos){
System.out.println("CODIGOPROYECTO:"+proyecto.getCodigoProyecto());
System.out.println("NOMBREPROYECTO:"+proyecto.getNombreProyecto());
}

HibernateTemplate
JavaPersistenceQL
JdbcTemplate
MapeoORMJPA
SpringCore

HayvariosmodosdecrearconsultasJPQL:

SpringMVC

Consultasdinmicasquesoncreadasyejecutadasenelmismomomento.

StatefulSessionBean
StatelessSessionBean

1
2
3
4

publicList<Proyecto>findAllProyectos{
Queryquery=entityManager.createQuery("SELECTpjFROMProyectopj");
returnquery.getResultList();
}

Consultasnombradas,sondefinidasenlapropiaclasemediantelaanotacin@NamedQuery

http://javierferrandiz.com/?p=194

1/4

18/4/2015

JavierFerrandiz|JPQLpararecuperarentidades.
1
2
3
4
5
6
7

@Entity
@NamedQuery(
name="findAllProyectos",
query="SELECTpjFROMProyectopj"
)
@Table(name="PROYECTO")
publicclassProyecto{

Enmuchasocasionesnecesitaremosdefinirmsdeunaconsultanombrada.
1
2
3
4
5
6
7
8
9
10
11
12
13

@Entity
@NamedQueries({
@NamedQuery(
name="findAllProyectos",
query="SELECTpjFROMProyectopj"
),
@NamedQuery(
name="findProyectosByCodigo",
query="SELECTpjFROMProyectopjWHEREpj.codigoProyectoLIKE?1"
)
})
@Table(name="PROYECTO")
publicclassProyecto{

Elatributonamede@NamedQueryeselmedioporelculaccederalaconsultayqueryeslaconsultajpql.
1
2
3
4

publicList<Proyecto>findAllProyectos{
Queryquery=entityManager.createNamedQuery("findAllProyectos");
returnquery.getResultList();
}

AlgunosmtodosparacrearinstanciasdeQuery
publicQuerycreateQuery(Stringjpql):CreaunaquerydinmicaconunasentenciaJPQL
publicQuerycreateNamedQuery(Stringname):CreaunainstanciadeQueryapartirdelnombreproporcionado
deunanamedquery.EstemtodopuedeserusadotantoparaconsultasconJPQLcomoparaconsultascon
SQLnativo
publicQuerycreateNativeQuery(Stringsql):CreaunaquerydinmicausandounasentenciaSQL.
publicQuerycreateNativeQuery(Stringsql,ClassresulClass):Creaunaquerydinmicausandounasentencia
SQLconteniendoelresultadoenresultClass
publicQuerycreateNativeQuery(Stringsql,StringresultSetMapping):Creaunaquerydinmicausandouna
sentenciaSQL,recuperandoelresultadodevariostiposdeentidades.
AlgunosmtodosdelainterfazQuery
publicListgetResultList():Recuperamoselresultadodeunaconsulta
publicObjectgetSingleResult():Recuperamosunsoloobjetodelaconsulta
publicintexecuteUpdate():EjecutaunasentenciaUPDATEoDELETEretornandoelnmeroderegistros
afectados
publicQuerysetMaxResults(intmaxResult):Estableceelnmeromximodeobjetosarecuperar
publicQuerysetFirstResult(intstartPosition):Establecelaposicininicialapartirdelcualrecuperarlossiguientes
objetos
publicQuerysetHint(StringhintName,Objectvalue):Estableceunhintespecfcodelproveedordepersistenciaa
laconsulta.
publicQuerysetParameter(Stringname,Objectvalue):Estableceunvalorparaunparmetroconnombrename
publicQuerysetParameter(Stringname,Datevalue,TemporalTypetemporalType):Estableceunvalorparaun
parmetroconnombrename

http://javierferrandiz.com/?p=194

2/4

18/4/2015

JavierFerrandiz|JPQLpararecuperarentidades.
publicQuerysetParameter(Stringname,Calendarvalue,TemporalTypetemporalType):Estableceunvalorpara
unparmetroconnombrename
publicQuerysetParameter(intposition,Objectvalue):Estableceunvalorparaunparmetroposicional
publicQuerysetParameter(intposition,Datevalue,TemporalTypetemporalType):Estableceunvalorparaun
parmetroposicional
publicQuerysetParameter(intposition,Calendarvalue,TemporalTypetemporalType):Estableceunvalorparaun
parmetroposicional
Ejemplo.
1
2
3
4
5

Queryquery=entityManager.createNamedQuery("findProyectosByCodigo");
query.setParameter(1,"PJ1");
query.setMaxResults(10);
query.setFirstResult(3);
List<Proyecto>proyectos=query.getResultList();

EnesteejemplolaconsultaJPQLalaquehacereferenciaelnombrefindProyectosByCodigoesSELECTpj
FROMProyectopjWHEREpj.codigoProyectoLIKE?1,comovemosestaconsultadeberecibirunparmetro
posicionalexpresadomediante?1yestablecemoselvalorparadichoparmetroconlasentenciadelalinea2.
Enlalinea3loquesehaceesespecificarelnmerodeentidadescomomximoquevamosarecuperaryenla
linea4indicamosapartirdequeregistrodebasededatosrecuperamoslasentidades.Asiquevamosa
recuperarapartirdelcuartoregistrodelabasededatosunmximodediez.
Estableciendoparmetrosparaunaquery.
Existendosmodosdeestablecerlosparmetrosparaunaconsulta,medianteunnmeroomedianteunnombre.
Cuandoesunenteroelparmetrosedenominaposicionalcomoenelejemploanterior.
YcuandoesunnombresedenominanombradoporejemploparalaconsultaSELECTpjFROMProyectopj
WHEREpj.ciudadLIKE:ciudad
1
2

query.setParameter("ciudad","Madrid");
List<Proyecto>proyectos=query.getResultList();

Recuperarunasolaentidad
publicObjectgetSingleResult()delainterfazQuery
Parautilizarestemtdodebemosestarsegurosquesolovamosaobtenerunanicaentidad.Siobtenemosms
deunalanzarunaexcepcinNonUniqueResultException,ysinoobtenemosentidadalgunalanzarla
excepcinNoResultException
1
2
3

Queryquery=entityManager.createNamedQuery("findProyectosById");
query.setParameter(1,newInteger(1));
Proyectoproyecto=query.getSingleResult();

Recuperandounacoleccindeentidades
publicListgetResultList()delainterfazQuery
Obtenemosunalistadeentidades,encasodenoencontrarentidadesdevuelveunalistavacia.
1
2
3

Queryquery=entityManager.createQuery("SELECTpjFROMProyectopjWHEREpj.ciudad=:ciudad");
query.setParameter("ciudad","Londres");
List<Proyecto>proyectos=query.getResultList();

Paginacin
ConlaayudadelosmtodossetMaxResultsysetFirstResultdelainterfazQueryvamosapoderrealizarla
paginacindeconsultas.ElmtodosetMaxResultsnospermiteespecificarelnmeromximodeentidadesque

http://javierferrandiz.com/?p=194

3/4

18/4/2015

JavierFerrandiz|JPQLpararecuperarentidades.
vamosarecuperarenunaconsultayconelmtodosetFirstResultespecificamosapartirdequeentidaddelas
posiblesobtenidasenlaconsultaempezamosarecuperar.
1
2
3

query.setMaxResults(10);
query.setFirstResult(0);
List<Proyecto>proyectos=query.getResultList();

Enesteejemploserecuperarndetodaslasentidadesrecuperadaslasdiezprimerasdesdelaprimeraentidad.
Supongamosquequeremosrealizarunapaginacin,enlaquecadapginasecomponede5entidadesyen
cadaconsultaqueremosobtenerlassiguientecincoentidades.Ysidelaconsultaseobtienencincuenta
entidadesvamosatenerunapaginacindediezpginas.Paraesteejemplotendriamosqueestablecerel
parametrotamanioPagina=5
1
2
3
4
5
6
7
8
9

/*
*paramnumeroPaginapaginaarecuperar
*paramtamanioPaginanumerodeentidadesarecuperarencadapaginacin
*/
publicList<Proyecto>obtenerPagina(intnumeroPagina,inttamanioPagina){
query.setMaxResults(tamanioPagina);
query.setFirstResult(tamanioPagina*(numperoPagina1));
returnquery.getResultList();
}

UnejemplodeJPQL

EllenguajeJPQL

Dejauncomentario
Nombre
Correoelectrnico(noserpublicado)
Web

Enviarcomentario

JavierFerrandiz,ProgramadorWeb.

ProgramadoyDiseadoporFJavierPuertasFerrndiz

http://javierferrandiz.com/?p=194

4/4

S-ar putea să vă placă și