PDF de programación - Tema 16 - Acceso a Base de Datos Usando JPA

Imágen de pdf Tema 16 - Acceso a Base de Datos Usando JPA

Tema 16 - Acceso a Base de Datos Usando JPAgráfica de visualizaciones

Publicado el 12 de Junio del 2018
537 visualizaciones desde el 12 de Junio del 2018
184,5 KB
55 paginas
Creado hace 11a (21/06/2012)
Tema 16

Acceso a Bases de Datos Usando JPA


En el Tema 15: Acceso a base de Datos Usando JDBC vimos que Java nos permite
crear aplicaciones que accedan a base de datos usando un protocolo en la forma de
una API: la API JDBC. Una de las metas de JDBC era la de aislar el código de la
aplicación de las diferentes implementaciones de manejadores de base de datos,
permitiendo substituir un manejador de bases de datos por otro sin modificar una línea
de código. Desafortunadamente JDBC no proporciona una completa independencia de
los manejadores de bases de datos ya que hay ciertas diferencias entre esas
implementaciones que la JDBC no puede manejar y que nos obliga a hacer
modificaciones en la aplicación si se cambia de un manejador de base de datos a otro.


Desajuste de Impedancias


En el modelo del dominio, que es el que usamos en el diseño de nuestra aplicación,
tenemos clases, las bases de datos tienen tablas. Otro de los problemas de JDBC es el
trabajo que debe hacer el programador para convertir un objeto a un renglón de una
tabla y visceversa. Esa dificultad en la traducción entre una clase y una tabla se debe a
las diferencias entre ambos modelos. A esas diferencias se le conoce como Desajuste
de impedancias y se ilustran en la tabla 16.1:


Tabla 16.1 Desajuste de Impedancias entre los mundos OO y Relacional

Tablas, renglones
Objetos, clases
Columnas
Atributos, propiedades
Identidad
Llave primaria
Relación/referencia a otra entidad Llave foránea
No soportado
Herencia/polimorfismo
Indirectamente: Lógica SQL, procedimientos almacenados, triggers
Métodos
Código portable
No necesariamente portable, dependiente del vendedor.


La API de Persistencia de Java, JPA


La JPA es una capa de software por encima de JDBC que busca redicirle al
programador de la tarea de conversión entre el mundo OO y el mundo relacional
proveyendo de los siguientes servicios:


ITSON



Manuel Domitsu Kono

626

Acceso a Base de Datos Usando JPA

• Realiza el Mapeo Objeto - Relacional, esto es establece cómo persistir los

objetos en una base de datos.

• Persiste los objetos a la base de datos. Realiza las operaciones de altas, bajas y

cambios de objetos en la base de datos.

• Permite la búsqueda y recuperación de objetos de la base de datos mediante su

propio Lenguaje de Consulta de Persistencia de Java o SQL.

Mapeo Objeto – Relacional

El Mapeo Objeto – Relacional, ORM, es un procedimiento para establecer en que
registro de una tabla se almacena cada objeto y en que columna se almacenará cada
atributo. Adicionalmente, ORM establece cómo se mapean las relaciones entre los
objetos incluyendo la herencia.
Mapeo Uno a Uno

En una relación uno a uno unidireccional, un objeto de una clase tiene una referencia a
cuando mucho otro objeto de otra clase. Por ejemplo, un cliente de una empresa puede
tener una cuenta de usuario en esa empresa para acceder a su extranet. Aquí
supondremos que un cliente sólo puede tener como máximo una cuenta de usuario en
esa empresa. Las clases Cliente y Usuario son las siguientes:


public class Cliente {
protected String clienteId;
protected String nombre;
protected String direccion
protected Usuario usuario;
}
public class Usuario {
protected String usuarioId;
protected String contrasena;
protected String rol;
}



Las clases anteriores se mapean a dos tablas relacionadas por una llave foranea de la
siguiente manera:


clientes

clienteId not null, primary key varchar(10)
nombre not null, varchar(35)
direccion not null, varchar(35)
usuarioId not null, varchar(10)
foreing key (usuarios(usuarioId))

usuarios

usuarioId not null, primary key varchar(10)

ITSON



Manuel Domitsu Kono

public class Cliente {
protected String clienteId;
protected String nombre;
protected String direccion
protected Usuario usuario;
}
public class Usuario {
protected String usuarioId;
protected String contrasena;
protected String rol;
protected Cliente cliente;
}

public class Medio {
protected String clave;
protected String titulo;
protected Genero genero;
protected int duracion;
protected Date fecha;
}
public class Genero {
protected String cveGenero;
protected String nombre;
protected char tipoMedio;
}



Tema 16

Acceso a Base de Datos Usando JPA

627

contrasena not null, varchar(10)
rol not null, varchar(20)


Si queremos que la relación sea bidireccional, dos objetos de diferentes clases tienen
una referencia al otro objeto. Si para las clases Cliente y Usuario deseamos que la
relación sea bidireccional tendremos que su código es el siguiente:


Mapeo Muchos a Uno

En una relación muchos a uno unidireccional, muchos objetos de una clase tiene una
referencia a cuando mucho otro objeto de otra clase. Por ejemplo, varios medios
(canciones o películas) pueden tener el mismo género. Las clases Medio y Genero
son las siguientes:



Las clases anteriores se mapean a dos tablas relacionadas por una llave foranea de la
siguiente manera:


medios

clave not null, primary key varchar(10)
titulo not null, varchar(35)
cveGenero not null, varchar(10)
foreing key (generos(cveGenero))
duracion not null, integer

ITSON



Manuel Domitsu Kono

628

Acceso a Base de Datos Usando JPA

fecha Date


generos

cveGenero not null, primary key varchar(10)
nombre not null, varchar(20)
tipoMedio not null, char

Mapeo Uno a Muchos

En una relación uno a muchos o muchos a uno bidireccional, el lado de uno de la
relación tiene una referencia a una colección (Collection, List o Set) de objetos
de la otra clase. Por ejemplo, las clases Cancion y Genero con una relación uno a
muchos tendrían la forma siguiente:


public class Medio {
protected String clave;
protected String titulo;
protected Genero genero;
protected int duracion;
protected Date fecha;
}
public class Genero {
protected String cveGenero;
protected String nombre;
protected char tipoMedio;
List<Medio> listamedios;
}



Las clases anteriores se mapean a las mismas tablas de la relación muchos a uno.
Mapeo Muchos a Muchos

En una relación muchos a muchos, dos objetos de diferente clase tienen una
referencia a una colección de objetos de la otra clase. Por ejemplo, una canción puede
estar en varios álbumes y un álbum puede tener varias canciones. Las clases Cancion
y Album son las siguientes:


public class Cancion {
protected String clave;
protected String titulo;
protected Genero genero;
protected int duracion;
protected Date fecha;
protected List<Album> listaAlbumes;
}
public class Album {
protected String cveAlbum;



ITSON



Manuel Domitsu Kono

Tema 16

Acceso a Base de Datos Usando JPA

629

protected String nombre;
protected List<Cancion> listaCanciones;
}

Las clases anteriores se mapean a dos tablas relacionadas por una tabla conjunta de la
siguiente manera:


canciones

clave not null, primary key varchar(10)
titulo not null, varchar(35)
cveGenero not null, varchar(10)
foreing key (generos(cveGenero))
duracion not null, integer
fecha Date
cveAlbum not null, varchar(10)

albumes

cveAlbum not null, primary key varchar(10)
nombre not null, varchar(20)
clave not null, varchar(10)

canciones_albumes

clave not null, primary key varchar(10)
foreing key (canciones(clave))
cveAlbum not null, primary key varchar(10)
foreing key (albumes(cveAlbum))



Herencia

El concepto de herencia no tiene un equivalente directo en el mundo relacional. Sin
embargo hay varias estrategias para mapear la herencia entre clases a tablas:


• Una sola tabla
• Tablas conjuntas
• Una tabla por clase


Para ilustrar las tres estrategias, consideremos las siguientes tres clases:


public class Medio {
protected String clave;
protected String titulo;
protected Genero genero;
protected int duracion;
protected Date fecha;
}

public class Cancion extends Medio {
private String interprete;
private String autor;
private d String album;
}

ITSON



Manuel Domitsu Kono

630



Acceso a Base de Datos Usando JPA

public class Pelicula extends Medio {
private String actor1;
private String actor2;
private String director;
}

Estrategia de una Sola Tabla

En esta estrategia, todas las clases de la jerarquía se mapean a una sola tabla. Los
diferentes objetos de la jerrquía se identifican usando una columna especial llamada
columna descriminadora que contiene un valor único para cada tipo de objeto en un
registro dado:


medios

clave not null, primary key varchar(10)
titulo not null, varchar(35)
tipoMedio not null, varchar(1)
cveGenero not null, varchar(10)
foreing key (generos(cveGenero))
duracion not null, integer
fecha Date
interprete varchar(35)
autor varchar(35)
album varchar(20)
actor1 varchar(35)
actor2 varchar(35)
director varchar(35)


En este caso tipoMedio es la columna descriminadora y contendrá un valor diferente
para cada tipo de objeto: Cancion o Película. Las columnas que no corresponden a
un objeto en particular teinen valores NULL. Esta estrategia es simple de usar. Sin
embargo tiene la desventaja de desperdiciar espacio debido a todos esos val
  • Links de descarga
http://lwp-l.com/pdf11813

Comentarios de: Tema 16 - Acceso a Base de Datos Usando JPA (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad