Transcript
  • 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