-
18/4/2015 JavierFerrandiz|JPQLpararecuperarentidades.
http://javierferrandiz.com/?p=194 1/4
Buscar
BuscarJPQLpararecuperarentidades.
Publicadoel14/07/2014porjavier
JPQLPARARECUPERARENTIDADES.
Lospasosbsicosparaejecutarunaconsultajpqlconjpa,sonlossiguientes:
1.ObtenerunainstanciadeunEntityManager
12
EntityManagerFactoryentityManagerFactory=Persistence.createEntityManagerFactory("jpapersistenceejercicio3"EntityManagerentityManager=entityManagerFactory.createEntityManager();
2.CrearunainstanciaQuery
1
Queryquery=entityManager.createQuery("SELECTpjFROMProyectopjWHEREpj.codigoProyectoNOTIN(SELECTv.proyecto.codigoProyectoFROMVentav)"
3.Ejecutarlaconsulta
1 Listproyectos=(List)query.getResultList();
4.Recuperarlasentidades
1234
for(Proyectoproyecto:proyectos){System.out.println("CODIGOPROYECTO:"+proyecto.getCodigoProyecto());System.out.println("NOMBREPROYECTO:"+proyecto.getNombreProyecto());}
HayvariosmodosdecrearconsultasJPQL:
Consultasdinmicasquesoncreadasyejecutadasenelmismomomento.
1234
publicListfindAllProyectos{Queryquery=entityManager.createQuery("SELECTpjFROMProyectopj");returnquery.getResultList();}
Consultasnombradas,sondefinidasenlapropiaclasemediantelaanotacin@NamedQuery
Entradasrecientes
ContenedorSpringQuesunStatefulSessionBean?QuesunStatelessSessionBean?IntroduccinSpringMVCGenericAccessDataconHibernate
Archivos
septiembre2014agosto2014julio2014
Categoras
HibernateHibernateTemplateJavaPersistenceQLJdbcTemplateMapeoORMJPASpringCoreSpringMVCStatefulSessionBeanStatelessSessionBean
EnterpriseJavaBeans Hibernate Spring SobreM
JavierFerrandiz
Siempreadelantesinprecipitacinperosinpausa.
-
18/4/2015 JavierFerrandiz|JPQLpararecuperarentidades.
http://javierferrandiz.com/?p=194 2/4
1234567
@Entity@NamedQuery(name="findAllProyectos",query="SELECTpjFROMProyectopj")@Table(name="PROYECTO")publicclassProyecto{
Enmuchasocasionesnecesitaremosdefinirmsdeunaconsultanombrada.
12345678910111213
@Entity@NamedQueries({@NamedQuery(name="findAllProyectos",query="SELECTpjFROMProyectopj"),@NamedQuery(name="findProyectosByCodigo",query="SELECTpjFROMProyectopjWHEREpj.codigoProyectoLIKE?1")})@Table(name="PROYECTO")publicclassProyecto{
Elatributonamede@NamedQueryeselmedioporelculaccederalaconsultayqueryeslaconsultajpql.
1234
publicListfindAllProyectos{Queryquery=entityManager.createNamedQuery("findAllProyectos");returnquery.getResultList();}
AlgunosmtodosparacrearinstanciasdeQuery
publicQuerycreateQuery(Stringjpql):CreaunaquerydinmicaconunasentenciaJPQL
publicQuerycreateNamedQuery(Stringname):CreaunainstanciadeQueryapartirdelnombreproporcionadodeunanamedquery.EstemtodopuedeserusadotantoparaconsultasconJPQLcomoparaconsultasconSQLnativo
publicQuerycreateNativeQuery(Stringsql):CreaunaquerydinmicausandounasentenciaSQL.
publicQuerycreateNativeQuery(Stringsql,ClassresulClass):CreaunaquerydinmicausandounasentenciaSQLconteniendoelresultadoenresultClass
publicQuerycreateNativeQuery(Stringsql,StringresultSetMapping):CreaunaquerydinmicausandounasentenciaSQL,recuperandoelresultadodevariostiposdeentidades.
AlgunosmtodosdelainterfazQuery
publicListgetResultList():Recuperamoselresultadodeunaconsulta
publicObjectgetSingleResult():Recuperamosunsoloobjetodelaconsulta
publicintexecuteUpdate():EjecutaunasentenciaUPDATEoDELETEretornandoelnmeroderegistrosafectados
publicQuerysetMaxResults(intmaxResult):Estableceelnmeromximodeobjetosarecuperar
publicQuerysetFirstResult(intstartPosition):Establecelaposicininicialapartirdelcualrecuperarlossiguientesobjetos
publicQuerysetHint(StringhintName,Objectvalue):Estableceunhintespecfcodelproveedordepersistenciaalaconsulta.
publicQuerysetParameter(Stringname,Objectvalue):Estableceunvalorparaunparmetroconnombrename
publicQuerysetParameter(Stringname,Datevalue,TemporalTypetemporalType):Estableceunvalorparaunparmetroconnombrename
-
18/4/2015 JavierFerrandiz|JPQLpararecuperarentidades.
http://javierferrandiz.com/?p=194 3/4
publicQuerysetParameter(Stringname,Calendarvalue,TemporalTypetemporalType):Estableceunvalorparaunparmetroconnombrename
publicQuerysetParameter(intposition,Objectvalue):Estableceunvalorparaunparmetroposicional
publicQuerysetParameter(intposition,Datevalue,TemporalTypetemporalType):Estableceunvalorparaunparmetroposicional
publicQuerysetParameter(intposition,Calendarvalue,TemporalTypetemporalType):Estableceunvalorparaunparmetroposicional
Ejemplo.
12345
Queryquery=entityManager.createNamedQuery("findProyectosByCodigo");query.setParameter(1,"PJ1");query.setMaxResults(10);query.setFirstResult(3);Listproyectos=query.getResultList();
EnesteejemplolaconsultaJPQLalaquehacereferenciaelnombrefindProyectosByCodigoesSELECTpjFROMProyectopjWHEREpj.codigoProyectoLIKE?1,comovemosestaconsultadeberecibirunparmetroposicionalexpresadomediante?1yestablecemoselvalorparadichoparmetroconlasentenciadelalinea2.Enlalinea3loquesehaceesespecificarelnmerodeentidadescomomximoquevamosarecuperaryenlalinea4indicamosapartirdequeregistrodebasededatosrecuperamoslasentidades.Asiquevamosarecuperarapartirdelcuartoregistrodelabasededatosunmximodediez.
Estableciendoparmetrosparaunaquery.
Existendosmodosdeestablecerlosparmetrosparaunaconsulta,medianteunnmeroomedianteunnombre.Cuandoesunenteroelparmetrosedenominaposicionalcomoenelejemploanterior.
YcuandoesunnombresedenominanombradoporejemploparalaconsultaSELECTpjFROMProyectopjWHEREpj.ciudadLIKE:ciudad
12
query.setParameter("ciudad","Madrid");Listproyectos=query.getResultList();
Recuperarunasolaentidad
publicObjectgetSingleResult()delainterfazQuery
Parautilizarestemtdodebemosestarsegurosquesolovamosaobtenerunanicaentidad.SiobtenemosmsdeunalanzarunaexcepcinNonUniqueResultException,ysinoobtenemosentidadalgunalanzarlaexcepcinNoResultException
123
Queryquery=entityManager.createNamedQuery("findProyectosById");query.setParameter(1,newInteger(1));Proyectoproyecto=query.getSingleResult();
Recuperandounacoleccindeentidades
publicListgetResultList()delainterfazQuery
Obtenemosunalistadeentidades,encasodenoencontrarentidadesdevuelveunalistavacia.
123
Queryquery=entityManager.createQuery("SELECTpjFROMProyectopjWHEREpj.ciudad=:ciudad");query.setParameter("ciudad","Londres");Listproyectos=query.getResultList();
Paginacin
ConlaayudadelosmtodossetMaxResultsysetFirstResultdelainterfazQueryvamosapoderrealizarlapaginacindeconsultas.ElmtodosetMaxResultsnospermiteespecificarelnmeromximodeentidadesque
-
18/4/2015 JavierFerrandiz|JPQLpararecuperarentidades.
http://javierferrandiz.com/?p=194 4/4
UnejemplodeJPQL EllenguajeJPQL
vamosarecuperarenunaconsultayconelmtodosetFirstResultespecificamosapartirdequeentidaddelasposiblesobtenidasenlaconsultaempezamosarecuperar.
123
query.setMaxResults(10);query.setFirstResult(0);Listproyectos=query.getResultList();
Enesteejemploserecuperarndetodaslasentidadesrecuperadaslasdiezprimerasdesdelaprimeraentidad.
Supongamosquequeremosrealizarunapaginacin,enlaquecadapginasecomponede5entidadesyencadaconsultaqueremosobtenerlassiguientecincoentidades.Ysidelaconsultaseobtienencincuentaentidadesvamosatenerunapaginacindediezpginas.ParaesteejemplotendriamosqueestablecerelparametrotamanioPagina=5
123456789
/**paramnumeroPaginapaginaarecuperar*paramtamanioPaginanumerodeentidadesarecuperarencadapaginacin*/publicListobtenerPagina(intnumeroPagina,inttamanioPagina){query.setMaxResults(tamanioPagina);query.setFirstResult(tamanioPagina*(numperoPagina1));returnquery.getResultList();}
Dejauncomentario
Nombre
Correoelectrnico(noserpublicado)
Web
Enviarcomentario
JavierFerrandiz,ProgramadorWeb.
ProgramadoyDiseadoporFJavierPuertasFerrndiz