Documente Academic
Documente Profesional
Documente Cultură
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