introducción práctica a jpa2

113
Introducción práctica a JPA (Java Persistence API) Por: Manuel Schnidrig Año: 2011

Upload: jion1987

Post on 18-Jul-2015

160 views

Category:

Software


5 download

TRANSCRIPT

Page 1: Introducción práctica a JPA2

Introducción práctica a JPA

(Java Persistence API)

Por: Manuel Schnidrig Año: 2011

Page 2: Introducción práctica a JPA2

Introducción

• Nuestro proyecto esta escrito en torno a objetos, sin embargo la mayoría de las soluciones actuales de Base de Datos se basan en relaciones y vínculos entre estas: son Bases de Datos Relacionales (RDB).

Page 3: Introducción práctica a JPA2

Introducción

• Los objetos contienen datos muy diversos y dinámicos. Un mismo objeto puede contener datos simples, datos complejos, datos de tamaño variable, colecciones variables de datos, incluso mas objetos dentro de éste!

Page 4: Introducción práctica a JPA2

Introducción

• Las tablas o relaciones por lo general almacenan objetos escalares y de un tamaño fijo conocido.

Page 5: Introducción práctica a JPA2

Introducción

• Problema planteado: ¿Cómo persistir nuestros objetos en un entorno de Base de Datos Relacional (RDB)?

Page 6: Introducción práctica a JPA2

Introducción

• El núcleo del problema reside en traducir estos objetos a formas que puedan ser almacenadas en la base de datos para recuperarlas fácilmente, mientras se preservan las propiedades de los objetos y sus relaciones; estos objetos se dice entonces que son persistentes.

Page 7: Introducción práctica a JPA2

Introducción

• Desde el punto de vista de un programador, el sistema debe lucir como un almacén de objetos persistentes. Uno puede crear objetos y trabajar normalmente con ellos, los cambios que sufran terminarán siendo reflejados en la base de datos.

Page 8: Introducción práctica a JPA2

Mapeo Objeto-relacional (ORM)

• Es una técnica de programación que sirve para convertir datos entre el sistema de tipos utilizado en un lenguaje de programación orientado a objetos y el utilizado en una Base de Datos Relacional.

• Se crea una «Base de Datos Orientada a Objetos» virtual.

Page 9: Introducción práctica a JPA2

Mapeo Objeto-relacional (ORM)

• Existen varios frameworks para distintos lenguajes y aplicaciones que nos realizan de manera automática este mapeo.

• En esta ocasión veremos como funciona JPA, el framework estándar de Java para realizar la persistencia de objetos.

Page 10: Introducción práctica a JPA2

¿Qué es JPA?

• Framework del lenguaje de programación Java que maneja datos relacionales en aplicaciones usando la Plataforma Java en sus ediciones Standard (Java SE) y Enterprise (Java EE).

• Es una abstracción sobre JDBC que nos permite realizar dicha correlación objeto-relacional de forma sencilla, realizando por nosotros toda la conversión entre nuestros objetos y las tablas de una base de datos.

Page 11: Introducción práctica a JPA2

¿Qué es JPA?

• Nos permite realizar tanto la conversión objetos-tabla así como la recuperación de estos objetos de las tablas correspondientes, sin utilizar ni siquiera una línea de SQL.

• Puede crear por nosotros el esquema completo de tablas, y modificaciones posteriores, simplemente a partir de nuestra estructura de objetos persistentes!

Page 12: Introducción práctica a JPA2

¿Qué es JPA?

• También nos permite basarnos en un esquema de tablas ya existente y modelarlo a través de objetos sin tener q adaptar ninguna tabla (el framework se adapta a las tablas y sus relaciones).

Page 13: Introducción práctica a JPA2
Page 14: Introducción práctica a JPA2

Componentes de JPA

• La API en sí misma, definida en javax.persistence.package

• La Java Persistence Query Language (JPQL)

• Metadatos objeto/relacional

Page 15: Introducción práctica a JPA2

Interfaz JPA

• JPA solo establece una interfaz común que es implementada por diversos proveedores de persistencia, dándonos la posibilidad de elegir entre varias implementaciones.

• Algunos ejemplos de proveedores de persistencia son:

Page 16: Introducción práctica a JPA2

Estructura de JPA

Page 17: Introducción práctica a JPA2

Conceptos básicos: Entidad

• El concepto principal sobre el que se apoya este framework es el de Entidad.

• Una entidad de JPA es el equivalente a lo que sería una entidad del modelo Entidad-Relación

• Una entidad es la mínima unidad de persistencia.

• Modelamos las entidades mediante clases Java que cumplen ciertos requisitos.

Page 18: Introducción práctica a JPA2

Entidad: Requisitos

• Las entidades se modelan mediante POJO’s (Plain Old Java Objects)

• La clase entidad debe cumplir cuatro requisitos:

– Tener un constructor sin argumentos (public o protected).

– Ser una clase de primer nivel (no interna).

– No ser declarada final.

– Implementar la interface java.io.Serializable si es accedida remotamente.

Page 19: Introducción práctica a JPA2

Entidad: Requisitos

• Generalmente, las clases de entidad serán simples clases que solo contendrán variables de instancia y sus respectivos getters y setters.

Page 20: Introducción práctica a JPA2

Entidad: Requisitos

Page 21: Introducción práctica a JPA2

Entidad: ¿Qué se persiste?

• Por defecto, el estado persistente de un objeto entidad es representado mediante sus variables de instancia (field access)

• Si se desea, puede indicarse al framework que en vez de persistir las variables de instancia utilice los getters y setters del objeto para obtener los datos a persistir (property access)

Page 22: Introducción práctica a JPA2

Relaciones

• El segundo concepto básico es el de las relaciones.

• Al igual que en el modelo Relacional, estas vincularán ciertas entidades entre si, con una cierta cardinalidad y una cierta navegabilidad.

• Las representaremos mediante punteros a las entidades correspondientes dentro de la entidad correspondiente.

Page 23: Introducción práctica a JPA2

Relaciones

Page 24: Introducción práctica a JPA2

Metadatos

• ¿Cómo le indicamos al framework cuales son nuestras entidades persistentes y las diversas configuraciones de las mismas?

• Dos opciones:

– Mediante un archivo de configuración XML

– Mediante Anotaciones en el código fuente

Page 25: Introducción práctica a JPA2

Anotaciones ¿Qué son?

• Son una forma de añadir metadatos al código fuente Java que están disponibles para la aplicación en tiempo de ejecución.

• El compilador Java almacena los metadatos de la Anotación en los archivos de clases. Posteriormente, la JVM u otros programas pueden buscar los metadatos para determinar cómo interactuar con los elementos del programa o cambiar su comportamiento.

Page 26: Introducción práctica a JPA2

Anotaciones ¿Qué aportan?

• Información para el compilador (ej.: Detectar errores, suprimir advertencias)

• Procesamiento de tiempo de compilador y de tiempo de instalación (ej.: Generación de XML)

• Procesamiento de tiempo de ejecución

Page 27: Introducción práctica a JPA2

Anotaciones

• Ej: JavaDoc.

Page 28: Introducción práctica a JPA2

Anotaciones

Page 29: Introducción práctica a JPA2

Configuración de las entidades mediante anotaciones

• @Entity: Le indica al framework cuales son nuestros objetos que se van a persistir.

• La clase marcada con esta anotación debe cumplir todos los requisitos anteriormente mencionados

Page 30: Introducción práctica a JPA2

Configuración de las entidades mediante anotaciones

Page 31: Introducción práctica a JPA2

Entidades: Propiedades persistentes

• Lo que se persistirá en nuestra DB por defecto son los valores de las variables de instancia (propiedades) de nuestras clases de entidad.

• Excepto que se lo indiquemos explícitamente, todas las propiedades de la entidad serán persistidas, al menos las de tipos básicos.

Page 32: Introducción práctica a JPA2

Entidades: Identidad

• Toda entidad debe tener al menos una propiedad marcada como identidad, cuyo valor para cada instancia particular la diferencie del resto.

• La variable de instancia que identificará a la entidad debe ser marcada con la anotación @Id

Page 33: Introducción práctica a JPA2

Entidades: Identidad

• Podemos también indicarle al proveedor de persistencia que nos genere automáticamente el valor de este campo a medida que creamos los objetos.

• La manera más sencilla de hacer esto es anotando al identificador con la anotación @GeneratedValue

Page 34: Introducción práctica a JPA2

Entidades: Identidad

Page 35: Introducción práctica a JPA2

Entidades: Configuración por defecto

• JPA trabaja por configuración por excepción

• Si no se especifica nada, se asume la configuración por defecto

• Las únicas anotaciones requeridas para que una entidad sea funcional son @Entity y @Id

Page 36: Introducción práctica a JPA2

Entidades: Propiedades no persistentes

• La manera de indicar que una propiedad específica de una entidad no debe ser persistida, es mediante la anotación @Transient

• Es útil para marcar propiedades derivables.

Page 37: Introducción práctica a JPA2

Entidades: @Table y @Column

• Podemos especificar de manera específica el nombre que tendrán en la DB los elementos mapeados.

• Muy útil si la aplicación debe utilizar un esquema de BD existente.

Page 38: Introducción práctica a JPA2

Entidades: @Table y @Column

• @Table nos permite definir el nombre que tendrá la tabla que será mapeada en base a una entidad.

• @Column sirve para indicar explícitamente el nombre que llevará la columna que guarde el estado de la propiedad marcada.

• Si no se utilizan las anotaciones @Table y @Column, JPA asignará los nombres de las clases y las propiedades.

Page 39: Introducción práctica a JPA2

Entidades: @Table y @Column

Page 40: Introducción práctica a JPA2

Entidades: Tipo de acceso a las propiedades

• Permite especificar la manera en que JPA accederá a los datos de la entidad para realizar el mapeo.

• Puede ser de dos tipos:

– Acceso a variable (Field access)

– Acceso a propiedad (Property access)

Page 41: Introducción práctica a JPA2

Entidades: Field Access

• Se realiza el mapeo a través de las propias variables de instancia de la entidad.

• Hay una correlación directa datos del objeto-datos en los campos de las tablas.

• Anotaciones colocadas sobre las variables de instancia.

Page 42: Introducción práctica a JPA2

Entidades: Property Access

• El mapeo se hace a través de los métodos getters y setters de la entidad.

• Permite una mayor encapsulación de los datos.

• Permite aplicar validaciones antes de cargar los datos desde la DB.

• Hay que asegurarse que su estructura permita recuperar exactamente el estado.

• Las anotaciones se realizan sobre los «getters» de la entidad

Page 43: Introducción práctica a JPA2

Entidades: Tipo de acceso a las propiedades

Page 44: Introducción práctica a JPA2

Entidades: Mapeo de tipos Básicos

• Los tipos mas simples de Java son mapeados directamente en la BD como columnas del tipo mas aproximado al tipo de Java (que permita recuperar exactamente los valores).

• Por lo general no es necesario marcarlos, al menos que necesitemos indicar alguna opción de mappeado. Si es así, se utiliza la marca @Basic.

Page 45: Introducción práctica a JPA2

Entidades: Acceso temprano y demorado

• Podemos indicar el momento en que una propiedad específica va a ser realmente obtenida de la BD.

• Esto nos permite ahorrarnos el coste de cargar dicha propiedad inmediatamente si por su naturaleza o por su ubicación es ineficiente traerla sino hasta el momento de su utilización.

Page 46: Introducción práctica a JPA2

Entidades: Acceso temprano y demorado

• Por defecto, la mayoría de los tipos Java es obtenido mediante una lectura temprana. De todos modos, puede explicitarse, por ejemplo en un tipo básico, mediante

– @Basic(fetch = FetchType.EAGER)

• Para indicar explícitamente la lectura demorada sobre un tipo básico utilizamos:

– @Basic(fetch = FetchType.LAZY)

Page 47: Introducción práctica a JPA2

Entidades: Acceso temprano y demorado

Page 48: Introducción práctica a JPA2

Entidades: Mapeo de colecciones

• Una entidad puede tener propiedades de tipo java.util.Collection y/o java.util.Map que contengan tipos básicos.

• Los elementos de estas colecciones serán almacenados en una tabla diferente a la que contiene la entidad donde están declarados.

• El tipo de colección tiene que ser concreto (como ArrayList o HashMap) y nunca una interface.

Page 49: Introducción práctica a JPA2

Entidades: Mapeo de colecciones

• Podemos definir la lectura temprana o demorada de los elementos de estas colecciones mediante la anotación:

– @ElementCollection(fetch = FetchType.EAGER)

– @ElementCollection(fetch = FetchType.LAZY)

• Por defecto la lectura será demorada (Lazy).

Page 50: Introducción práctica a JPA2

Entidades: Mapeo de tipos enumerados

• Podemos mapear tipos enumerados (enum) mediante la anotacion @Enumerated

• La configuración por defecto de JPA mapeará cada valor ordinal de un tipo enumerado a una columna de tipo numérico en la base de datos.

Page 51: Introducción práctica a JPA2

Entidades: Mapeo de tipos embebidos

• Los tipos insertables (embeddables) son objetos que no tienen identidad, por lo que para ser persistidos deben ser primero insertados dentro de una entidad.

• Cada propiedad del tipo insertable será mapeada a la tabla de la entidad que lo contenga, como si fuera una propiedad declarada en la propia entidad.

Page 52: Introducción práctica a JPA2

Entidades: Mapeo de tipos embebidos

• Definimos un tipo insertable con la anotación @Embeddable

• Y lo insertamos en una entidad (u otro tipo insertable) con la anotación @Embedded

Page 53: Introducción práctica a JPA2

Asociaciones entre entidades

• Los modelos de datos incluyen asociaciones entre las distintas entidades que lo comprenden.

Page 54: Introducción práctica a JPA2

Asociaciones entre entidades

• Estas asociaciones incluyen además de las entidades involucradas, una cardinalidad que indica la participación de cada parte en la asociación.

Page 55: Introducción práctica a JPA2

Asociaciones entre entidades

• Otro concepto involucrado es la navegabilidad, que nos permite determinar la visión que tiene cada entidad sobre la relación en cuestión.

Page 56: Introducción práctica a JPA2

Asociaciones entre entidades

• En una Base de datos relacional, estas asociaciones están representadas mediante campos de clave foranea referenciando a algún campo clave de alguna tabla que o bien es la entidad referenciada o bien es una tabla auxiliar para acceder a los datos referenciados.

Page 57: Introducción práctica a JPA2

Asociaciones entre entidades

Page 58: Introducción práctica a JPA2

Asociaciones entre entidades

Page 59: Introducción práctica a JPA2

Asociaciones entre entidades

• En nuestro modelo de objetos, las asociaciones simplemente se representan mediante punteros al objeto o a los objetos en cuestión.

Page 60: Introducción práctica a JPA2

Asociaciones entre entidades

Page 61: Introducción práctica a JPA2

Asociaciones entre entidades

• JPA nos gestiona automáticamente las relaciones binarias, creando automáticamente las tablas auxiliares necesarias.

• Según su navegabilidad, existen dos tipos de relaciones binarias:

– Relaciones unilaterales

– Relaciones bilaterales

Page 62: Introducción práctica a JPA2

Asociaciones entre entidades

• Para que el framework realmente maneje estas asociaciones, necesitamos indicarlas mediante las anotaciones correspondientes.

– @OneToOne

– @OneToMany

– @ManyToOne

– @ManyToMany

Page 63: Introducción práctica a JPA2

Asociaciones unidireccionales

• Solo requieren especificar del lado que es dueño de la relación (el lado que «ve» la misma) la propiedad que referencia al objeto más la anotación correspondiente al tipo de asociación.

Page 64: Introducción práctica a JPA2

Asociaciones unidireccionales

Page 65: Introducción práctica a JPA2

Asociaciones bidireccionales

• Requieren de un lado dueño de la relación, el cual deberá ser anotado de la misma manera que en las relaciones unidireccionales, y un lado no-dueño o lado inverso, el cual deberá tener la referencia a su dueño mas la anotación inversa correspondiente modificada por la opción «mappedBy»

Page 66: Introducción práctica a JPA2

Asociaciones bidireccionales

Page 67: Introducción práctica a JPA2

Asociaciones: Ejemplos «OneToOne»

• Es la relación mas sencilla.

• En relaciones bidireccionales la foreign key se coloca del lado dueño de la relación.

Page 68: Introducción práctica a JPA2

Asociaciones: Ejemplos «OneToOne»

Page 69: Introducción práctica a JPA2

Asociaciones: Ejemplos «OneToOne»

(Bidireccional)

Page 70: Introducción práctica a JPA2

Asociaciones: Ejemplos «OneToOne»

(Bidireccional)

Page 71: Introducción práctica a JPA2

Asociaciones: Ejemplos «OneToMany» y «ManyToOne»

• Veremos primero el caso bidireccional, que es el mas sencillo y se aplica también para relaciones ManyToOne unidireccionales.

• En este caso, el dueño de la relación debe ser el lado «Many»

Page 72: Introducción práctica a JPA2

Asociaciones: Ejemplos «OneToMany» y «ManyToOne»

Page 73: Introducción práctica a JPA2

Asociaciones: Ejemplos «ManyToMany»

• Requieren de una tabla auxiliar intermedia que contenga pares de asociación.

Page 74: Introducción práctica a JPA2

Asociaciones: Ejemplos «ManyToMany»

Page 75: Introducción práctica a JPA2

Asociaciones: Ejemplos «ManyToMany»

• Podemos especificar los nombres que tendrán tanto la tabla auxiliar como sus columnas con la anotación @JoinTable en el lado dueño

Page 76: Introducción práctica a JPA2

Asociaciones: Ejemplos «ManyToMany»

• Una relacion ManyToMany puede ser unidireccional.

• El mapeado será realizado de la misma manera, solo que una de las entidades nunca usara la tabla de join.

Page 77: Introducción práctica a JPA2

Asociaciones: Ejemplos «OneToMany» unidireccional

• Dado que no podemos colocar una cantidad variable de foreign keys en la tabla de la entidad, requeriremos aquí también una tabla auxiliar (Join Table)

Page 78: Introducción práctica a JPA2

Asociaciones: Ejemplos «OneToMany» unidireccional

Page 79: Introducción práctica a JPA2

Persistencia

• Con lo visto hasta acá, podemos construir nuestros objetos del negocio e indicar (mediante anotaciones) la forma en que se relacionan estas entidades y como queremos que se persistan en la DB.

• Pero necesitamos ahora un mecanismo que haga efectiva esta persistencia.

Page 80: Introducción práctica a JPA2

Persistencia

• Podríamos pensar que la simple manipulación de los objetos declarados como entidades resultará en la persistencia inmediata de los cambios realizados en la DB; En realidad no funciona de esa manera, y tampoco sería una forma eficiente de hacerlo.

• Necesitamos más control sobre que queremos persistir y cuando.

Page 81: Introducción práctica a JPA2

Persistencia: Entity Manager

• Este control esta dado por un conjunto de acciones encapsuladas en un objeto denominado «EntityManager».

• Un EntityManager nos permite básicamente realizar todas las operaciones de persistencia (CRUD) de los objetos desde y hacia la DB.

Page 82: Introducción práctica a JPA2

Persistencia: Entity Manager

Page 83: Introducción práctica a JPA2

Persistencia: Persistence Context

• Para JPA, una entidad puede estar en uno de los dos estados siguientes:

– Managed (gestionada)

– Detached (separada)

• Al crear un entityManager, se asocia al mismo un «Contexto de Persistencia» (inicialmente vacío) el cuál contiene el conjunto de entidades que están siendo manejadas por él.

Page 84: Introducción práctica a JPA2

Persistencia: Persistence Context

• A medida que realizamos operaciones sobre nuestras entidades a través de un Entity Manager, éstas pasan a pertenecer al Contexto de Persistencia de éste.

• Las entidades que se encuentran gestionadas por algun EntityManager son sincronizadas con la Base de Datos mientras pertenezcan a ese Contexto de Persistencia.

Page 85: Introducción práctica a JPA2

Persistencia: Transacciones

• El EntityManager trabaja mediante Transacciones.

• Podemos trabajar con dos tipos de transacciones:

– Manejada por la aplicacion (RESOURCE_LOCAL)

– Manejada por el contenedor (JTA)

• Utilizaremos RESOURCE_LOCAL.

Page 86: Introducción práctica a JPA2

Persistencia: Transacciones

Page 87: Introducción práctica a JPA2

Persistencia: Peristence Unit

• Los EntityManager son configurados para persistir ciertos objetos, para trabajar contra una base de datos en particular, y para utilizar un determinado tipo de transacciones.

• Esta configuración es agrupada en lo que se denomina un Unidad de Persistencia («PersistenceUnit»)

Page 88: Introducción práctica a JPA2

Persistencia: Resumen

• El mapeo de entidades se realiza a través de transacciones utilizando un Entity Manager.

• Las entidades que está manejando actualmente un Entity Manager se denomina su Contexto de Persistencia.

• La configuración específica de los componentes que realizan el mapeo (ORM) se denomina Unidad de Persistencia.

Page 89: Introducción práctica a JPA2
Page 90: Introducción práctica a JPA2

Utilizando los EM

• Se verá como utilizar los Entity Manager en un entorno Java SE, es decir, «Entity Managers administrados por la aplicación».

• En entornos Java EE normalmente se utilizan Entity Managers administrados por el contenedor, los cuales si bien su administración es mas sencilla, no es posible utilizalos en aplicaciones Java SE.

Page 91: Introducción práctica a JPA2

Configurando un «Persistence Unit»

• Cada Unidad de Persistencia tiene un nombre y es declarada mediante un archivo xml.

• Básicamente especificamos tres cosas en una configuración determinada:

– Nuestras clases marcadas como entities.

– El tipo de transacciones a utilizar.

– El driver JDBC a utilizar para la conexión con la DB.

Page 92: Introducción práctica a JPA2

Persistence Unit

Page 93: Introducción práctica a JPA2

Persistence Unit

Page 94: Introducción práctica a JPA2

Persistence Unit

Page 95: Introducción práctica a JPA2

Persistence Unit

Page 96: Introducción práctica a JPA2

Obtención de un Entity Manager

• Al trabajar Con EntityMangers administrados por la aplicación, debemos explicitamente configurar y crear nuestros EntityManagers, iniciar las transacciones, hacer commit o rollback de las mismas, etc.

Page 97: Introducción práctica a JPA2

Obtención de un Entity Manager: Paso previo: Factory

• Esta factory nos permitirá obtener Entity Manager’s pertenecientes a una unidad de persistencia particular.

• Al crear la factory, debemos pasarle el nombre de la Unidad de Persistencia que queremos que utilice para crear nuestros Entity Manager.

Page 98: Introducción práctica a JPA2

EntityManager: Ciclo Básico de trabajo

Page 99: Introducción práctica a JPA2

Operaciones básicas

• Con lo visto, ya podemos comenzar a persistir y traer nuestros objetos de la DB.

• A continuación se presenta un conjunto de operaciones básicas que podemos realizar con nuestro Entity Manager una vez creado.

Page 100: Introducción práctica a JPA2

Persistir una entidad

• Utilizamos el método persist()

• Si el Entity Manager por alguna razón no puede completar esta acción, arroja una «PersistenceException»

Page 101: Introducción práctica a JPA2

Recuperar una entidad vía #id

• Podemos realizar esta acción directamente mediante el método find().

• Si la entidad cuyo id es el pasado como argumento no existe en la BD, find() retorna null.

Page 102: Introducción práctica a JPA2

Borrar una entidad

• Utilizamos el método remove()

• La entidad a borrar debe estar dentro del contexto de persistencia del Entity Manager.

Page 103: Introducción práctica a JPA2

Actualizar una entidad

• Para actualizar una entidad, trabajamos directamente sobre la entidad en cuestión, es decir no le avisamos al Entity Manager de los cambios a realizar, simplemente los efectuamos.

• Los cambios serán persistidos en la BD al momento del cierre de la transacción.

Page 104: Introducción práctica a JPA2

Actualizar una entidad

• Es importante aclarar que la entidad a modificar debe estar dentro del Contexto de Persistencia, de otra manera el Entity Manager nunca podrá saber que se han realizado cambios sobre tal entidad y por ende nunca los persistirá.

• Podemos hacer que una entidad desasociada de nuestro contexto pase a formar parte de el utilizando el comando merge()

Page 105: Introducción práctica a JPA2

Actualizar una entidad

Page 106: Introducción práctica a JPA2

Ciclo de vida de las entidades

Page 107: Introducción práctica a JPA2

Obtención avanzada de objetos

• Podemos realizar consultas sobre la DB utilizando un lenguaje muy parecido a SQL pero orientado a objetos, el JPQL

• JPA 2.0 nos permite crear consultas tipadas

Page 108: Introducción práctica a JPA2

JPQL: Ejemplo

• Con getResultList() obtenemos una lista de los objetos que resultan de la ejecucion de la consulta.

Page 109: Introducción práctica a JPA2

• Si realizamos una consulta la cual estamos seguros que retorna un único objeto como resultado, usamos getSingleResult()

Page 110: Introducción práctica a JPA2

Patrametros

• La utilización de parametros permite reutilizar una misma query.

• Esto es más eficiente que modificar el String y crear otra query ya que no debe recompilarse la consulta.

Page 111: Introducción práctica a JPA2

Otras caracteristicas

• Mapeo de objetos embebidos y enumerados

• Identificadores compuestos

• Restricciones en operaciones en cascada, orphan remove

• Herencia de entidades

• JPA Criteria API

Page 112: Introducción práctica a JPA2

Por donde seguir?

• Buenos tutoriales en internet:

– David Marco, Introducción a JPA: http://www.davidmarco.es/blog/entrada.php?id=144

– Tutorial oficial de Java EE 6, sección JPA: http://docs.oracle.com/javaee/6/tutorial/doc/

• Documentaciones de las páginas de los proveedores de persistencia

• Libros:

– Pro JPA 2: Mastering the Java™ Persistence API