4
Buscar… Buscar JPQL para recuperar entidades. Publicado el 14/07/2014 por javier JPQL PARA RECUPERAR ENTIDADES. Los pasos básicos para ejecutar una consulta jpql con jpa, son los siguientes: 1. Obtener una instancia de un EntityManager 1 2 EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpa‐persistence‐eje EntityManager entityManager = entityManagerFactory.createEntityManager(); 2. Crear una instancia Query 1 Query query = entityManager.createQuery("SELECT pj FROM Proyecto pj WHERE pj.codigoProyecto NOT IN(SELE 3. Ejecutar la consulta 1 List<Proyecto> proyectos = (List<Proyecto>)query.getResultList(); 4. Recuperar las entidades 1 2 3 4 for(Proyecto proyecto:proyectos){ System.out.println("CODIGO PROYECTO : " + proyecto.getCodigoProyecto()); System.out.println("NOMBRE PROYECTO : " + proyecto.getNombreProyecto()); } Hay varios modos de crear consultas JPQL: Consultas dinámicas que son creadas y ejecutadas en el mismo momento. 1 2 3 4 public List<Proyecto> findAllProyectos { Query query = entityManager.createQuery("SELECT pj FROM Proyecto pj"); return query.getResultList(); } Consultas nombradas, son definidas en la propia clase mediante la anotación @NamedQuery Entradas recientes Contenedor Spring ¿Qué es un Stateful Session Bean? ¿Qué es un Stateless Session Bean? Introducción Spring MVC Generic Access Data con Hibernate Archivos septiembre 2014 agosto 2014 julio 2014 Categorías Hibernate HibernateTemplate Java Persistence QL JdbcTemplate Mapeo ORM JPA Spring Core Spring MVC Stateful Session Bean Stateless Session Bean Enterprise JavaBeans Hibernate Spring Sobre Mí JavierFerrandiz Siempre adelante sin precipitación pero sin pausa.

JPQL Para Recuperar Entidades

Embed Size (px)

DESCRIPTION

tip

Citation preview

  • 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