Está en la página 1de 60

Persistencia en Java

   Programación  de  Aplicaciones  


Agenda
 
 
nIntroducción a Base de Datos
nDestinosy mecanismos de persistencia
 
nAcceso directo a la Base de Datos
¨ Java Data Base Connectivity (JDBC)
nImpedance Mismatch
nMapeador Objeto-Relacional (ORM)
¨ Java Persistence API (JPA)
n Entidades
   
n Relaciones
   
n EntityManager

2
Introducción Base de Datos
n Base de Datos
¨ Conjunto de datos relacionados con diferentes modos
 de organización.
 
n DBMS (Database Management System)
¨ Grupo de Programas que sirven para definir, construir
 y manipular una base de datos.
 
n Metadata
¨ Información sobre un conjunto particular de datos.

3
Destino de Persistencia
n Persistencia de Objetos
¨ Extender el tiempo de vida de un objeto más allá del
 tiempo de vida del proceso que lo creó.
n Destino de Persistencia
¨ Fuente de datos (Data Source) donde se persiste la
información de una aplicación.

BD relacional, de   Archivos de texto,  


objetos, xml.   xml, binarios.   4
Mecanismos de Persistencia
n Definición
¨ Técnica básica que permite resolver la persistencia
 de objetos.
 
 
 
n Mecanismos
¨ Acceso directo a base de datos relacional
¨ Mapeador Objeto-Relacional
¨ Serialización de Objetos
¨ Generador de código
¨ …

5
Acceso directo a Base de Datos

6
Acceso
 
directo a Base de Datos
 
nVentaja
¨Buen desempeño debido a que el acceso a la
   base se realiza en forma directa
 
 ¨Simplifica acceso a la Base de Datos
 
n
 
Desventaja
 
 
 
   ¨Mayor complejidad para el diseño de la
 
 
 
     persistencia
   
n Herramienta
 
Java
 ¨Java Database Connectivity (JDBC)

7
JDBC
 
 
 
nFuncionamiento
¨Sentencias
SQL para realizar consultas y modificar el
 estado de la BD:
 
   nINSERT
 
   nUPDATE
 
   nDELETE
 
   nSELECT
 
nPortabilidad
¨Interfaz
de programación portable pero el lenguaje
SQL depende del proveedor de BD

8
JDBC - Arquitectura

9
JDBC - Diseño
n Patrón de Diseño Data Access Object (DAO)
¨ Encapsula todo el acceso al destino de datos
   utilizando la capa de acceso a datos.
 
 ¨ Cada objeto de negocio a ser persistido crea un
   DAO con la información necesaria.
 
 ¨ Luego utiliza el objeto DAO para obtener y guardar
   información del origen de datos.
 
n Problema al “mapear” del modelo OO al
relacional:
¨ Impedance Mismatch
10
Impedance Mismatch (IM)
nDiferencias entre modelos

 Modelo OO    Modelo Relacional  


   
Clases, objetos   Tablas, filas  
   
Atributos, propiedades   Columnas  
   
Iden<dad   Clave Primaria (PK)  
   
Relaciones / referencias a otra en<dad   Clave Foránea (FK)  
   
Herencia / polimorfismo   No soportado directamente  
   
Métodos   Lógica SQL, store procedures, triggers.  
   
Código Portable   No necesariamente, depende del DBMS  

11
IM: Ejemplos de mapeo
n Entidad
¨ modelo OO

12
IM: Ejemplos de mapeo
n Entidad
¨ modelo relacional

13
IM: Ejemplos de mapeo
n Relaciones
¨ modelo OO

14
IM: Ejemplos de mapeo
n Relaciones
¨ modelo relacional

15
IM: Ejemplos de mapeo
n Herencia
¨ modelo OO

16
IM: Ejemplos de mapeo
n Herencia
¨ modelo relacional

17
Mapeador Objeto-Relacional

18
Mapeador Objeto-Relacional
Técnica que permite llenar el vacío entre el
n
modelo relacional y el modelo orientado a objetos.
¨ También conocido como O-R mapping u ORM
n Existe un mediador, encargado de mapear
automáticamente los conceptos de un modelo en
el otro.

19
Mapeador Objeto-Relacional
n Ventaja
   
 
   ¨ Reduce la cantidad de código necesario para lograr la
 
 
     persistencia. La aplicación resultante es fácil de
 
 
 
     mantener.
   
n
 
Desventaja
   
   ¨ Requiere mantener metadata sobre las entidades.
   
 
n Herramientas Java:
 
 ¨ JPA
 
 ¨ Hibernate
 
 ¨ TopLink
20
Java Persistence API
n
  Es un framework liviano para mapear objetos a
 
 
  BD relacionales usando la Plataforma Java en
 
 
 
 
sus ediciones Standard (Java SE) y Enterprise
 
    (Java
 
EE)
n Surge originalmente de la mano de EJB 3.0,
adoptando la experiencia de años de uso de
Hibernate y Toplink, seguidos luego por JDO

21
Java Persistence API
n
 
Persistencia basada en POJOs (Plain Old Java
 
 
  Objects)
 
 
n Guiada
 
por metadatos
 ¨ XML
 
 ¨ Anotaciones
¨ Gran uso de valores por defecto (configuración por
 excepción)
 
¨ Los metadatos se pueden agrupar en anotaciones
 lógicas y físicas

22
Java Persistence API
n Consultas orientadas a objetos
¨Provee un mecanismo para realizar
 consultas, recorriendo los objetos, sus
 propiedades y sus relaciones, sin necesidad
 de conocer columnas o claves foráneas a
 nivel de la base de datos
 
¨Las consultas eventualmente serán
 traducidas a SQL por el framework de
 consultas de JPA

23
JPA
 
- Entidades
 
 
 
 
nEntidades
n Se anotan con @Entity
n
 
Tienen una propiedad anotada con @Id
n Constructor sin argumentos public/protected
 
n No puede ser final
 
n Puede extender de otra
 
n Puede ser abstracta
 
n Son POJOs (Plain Old Java Object)

24
JPA - Entidades
n Ejemplo

25
JPA - Entidades
nMapeo de entidades
¨Por defecto se persisten en una tabla con el
 nombre de la clase
 
¨Si queremos persistir en otra tabla a nivel de
 la BD, podemos usar la anotación @Table

26
JPA - Entidades
n Generación de identificadores:
¨ A veces las aplicaciones deciden desentenderse de
 la generación automática de los identificadores
 
¨ Para ello se usa la anotación @GeneratedValue, en
 combinación con la anotación @Id
 
¨ No podemos confiar en que el valor este presente
 hasta que la transacción sea completada

27
JPA - Entidades
n Mapeo de atributos con tipo simple
¨ Incluye int, float, boolean, String, Date, Calendar, enumerados, etc.
   
¨ Por defecto se persisten todos los atributos, en columnas con el
 
  mismo nombre.
   
¨ Si queremos persistirlos en otra columna a nivel de la DB,
podemos usar la anotación @Column.

28
JPA - Relaciones
n Direccionalidad
¨ Relaciones Unidireccionales

 
 ¨ Relaciones Bidireccionales
n Cardinalidad
 
One-to-one
 ¨
 
 ¨ One-to-many
 
 ¨ Many-to-one
 
 ¨ Many-to-many

29
JPA - Relaciones
n Unidireccional: OneToOne

30
JPA - Relaciones
n Unidireccional: OneToOne
¨ @JoinColumn permite indicar la columna a la que se
va a mapear la relación.

31
JPA - Relaciones
n Unidireccional: OneToMany

32
JPA - Relaciones
n Unidireccional: OneToMany
¨ Es posible especificar la JoinTable que debe ser
usada a nivel de BD

33
JPA - Relaciones
n Unidireccional: ManyToOne

34
JPA - Relaciones
n Unidireccional: ManyToOne
¨ @JoinColumn indica la columna que permite realizar
el join a nivel de la BD.

35
JPA - Relaciones
n Bidireccional: OneToOne

36
JPA - Relaciones
n Bidireccional: OneToOne
¨ La anotación mappedBy sirve para indicar que una
 referencia corresponde a una relación bidireccional y
 no dos unidireccionales independientes
 
¨ La anotación @JoinColumn, va a estar en la entidad
 que contiene la columna a la que se va a mapear la
 relación. Esta entidad se conoce como owner (dueña)
 de la relación
 
¨ La otra entidad se conoce como el lado inverso de la
 relación y debe tener la anotación @mappedBy

37
JPA - Relaciones
n Bidireccional: OneToMany / ManyToOne

n Generalmente se implementa como:


¨ Una relación ManyToOne en la que va a estar
 definida la JoinColumn.
 
¨ Una relación OneToMany que va a ser el lado
 inverso, anotada con mappedBy.

38
JPA - Relaciones
n Bidireccional: OneToMany / ManyToOne

39
JPA - Relaciones
n Bidireccional: ManyToMany

40
JPA - Relaciones
n Bidireccional: ManyToMany
¨ Join Table

41
JPA - Relaciones
n Bidireccional: ManyToMany
¨ Es posible configurar la tabla usada para mantener
las relaciones a través de la anotación @JoinTable

42
JPA - EntityManager
n Las entidades no se persisten a si mismas cuando son
 
  creadas, así como tampoco son removidas cuando el
 
 
  garbage collector recicla los objetos
   
 
n Es la lógica de la aplicación la que debe manejar el ciclo
   
  de vida de persistencia
   
n Para este propósito, JPA provee la interfaz
EntityManager:

43
JPA - EntityManager
n La interfaz EntityManager define una serie de métodos
 
 
  que permiten manejar el ciclo de vida de las entidades
 
 
  de una aplicación
   
n Estos métodos incluyen operaciones como
 
 ¨ Persistencia de entidades
 
 ¨ Recuperación de entidades
 
 ¨ Obtención de consultas
 
 ¨ Inicio y fin de transacciones

44
JPA - EntityManager
n Ciclo de vida de las entidades

45
JPA - EntityManager
n persist()
¨ Esta operación acepta una nueva entidad como
 parámetro y la deja en estado managed.
 
¨ Si la entidad a persistir ya esta siendo administrada
 por el contexto de persistencia, entonces la operación
 la ignora.
 
¨ Podemos usar la operación contains() para verificar si
 la entidad esta managed.
 
¨ La invocación de esta operación no significa que la
 entidad es persistida en ese momento.

46
JPA - EntityManager
n
 
persist()
 
n Ejemplo:

47
JPA - EntityManager
n find()
¨ Cuando una entidad debe ser localizada usando su
   primary key, entonces el método a utilizar es find().
 
 ¨ Si la entidad existe devuelve una entidad que queda
   en estado managed.
 
n Ejemplo:

48
JPA - EntityManager
n remove()
   
 
 
   ¨ Para remover una entidad, se invoca remove() a una
 
 
     instancia de la entidad que se encuentre en estado
 
     managed.
   
 
   ¨ Hay que prestar atención a las relaciones con otras
 
 
 
     entidades, para evitar problemas de integridad
 
       referencial.
 
 
n Ejemplo:

49
JPA - EntityManager
n Transacciones
¨ Se deben utilizar transacciones manejadas
 explícitamente por la aplicación.
 
¨ Se utiliza la interfaz EntityTransaction:

50
JPA - EntityManager
n Transacciones
 
 ¨ Ejemplo:

51
JPA - EntityManager
n Consultas
¨ En JPA se utilizan consultas orientadas a objetos,
 aplicadas sobre las entidades, sus propiedades y sus
 relaciones
 
¨ El lenguaje utilizado se denomina Java Persistence
 Query Language (JPQL)
 
¨ El procesador de consultas de JPA, transforma una
 consulta JPQL en una consulta SQL
 
¨ Las consultas pueden ser de tipo Query,
 obteniéndose a través de la interfaz EntityManager

52
JPA - EntityManager
n Consultas
 
 ¨Una consulta JPQL admite los siguientes
   elementos:
n SELECT
n
 
FROM
n WHERE
 
n ORDER BY
 
n GROUP BY
 
n HAVING

53
JPA - EntityManager
n Consultas
 
 ¨ Ejemplo:

54
JPA - EntityManager
n Consultas
¨ Ejemplo con parámetro:

55
JPA - EntityManager
n Consultas
¨ Ejemplo con parámetro usando notación named

56
JPA – Unidad de Persistencia
n
 
Se define en un archivo XML denominado
 
 
  persistence.xml.
 
 
n
 
Cada Persistence Unit tiene un nombre único, el
 
 
  cual es usado por la aplicación para referirse a
 
 
  la
 
misma.
 
n Dentro del archivo persistence.xml pueden
definirse todas las unidades que se requieran,
siendo cada una de estas independiente.

57
JPA – Unidad de Persistencia
n Ejemplo: persistence.xml
The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again.

58
Ejemplo
n Implementación JPA
¨Open JPA
n Base
 
de Datos
 ¨HSQLDB

59
Referencias
n Pro EJB 3 Java Persistence API
¨ Mike Keith. Apress 2006
n HSQLDB
¨ http://hsqldb.org/
n
 
JPA
 
Tutorial
 
 
   ¨ http://docs.oracle.com/javaee/5/tutorial/doc/bnbpz.html
   
n Eclipse JPA
¨ http://www.eclipse.org/eclipselink

60

También podría gustarte