bases de datos en java - intro a hibernate
DESCRIPTION
Curso de introducción al uso de Hibernate para persistir objetos a bases de datos.TRANSCRIPT
![Page 2: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/2.jpg)
Índice de contenidos
Motivación de ORMIntroducción y confi guración de HibernateIntroducción a ORMConsultas y persistenciaAsociacionesTemas avanzados
![Page 3: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/3.jpg)
Motivación de ORM
![Page 4: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/4.jpg)
Problemas con JDBC
Es muy artesanalNo hay una relación directa entre modelo y persistenciaComplica un diseño MVCEl mantenimiento es costoso
![Page 5: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/5.jpg)
Acercando Objetos y Entidades
Las entidades son atributosLos objetos tienen atributos y métodosLas entidades tienen relacionesLos objetos son navegables
¿Cómo podemos tratarlos igual?
![Page 6: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/6.jpg)
ORM
Object Relational Mapping“This creates, in effect, a "virtual object database" that can be used from within the programming language.” WikipediaLos objetos pueden persistir en base de datos de forma transparente para el programador
![Page 7: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/7.jpg)
JPA
Java Persistence APIDefi ne cómo persistir objetosProporciona un diseño que desacopla el modelo de la persistencia
![Page 8: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/8.jpg)
EJB3
Entorno JEE (Java Enterprise Edition)Defi ne tres tipos:
SesionesMensajesEntidades � JPA
![Page 9: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/9.jpg)
Hibernate
Http://www.hibernate.org/Software libreImplementación de referencia de JPA
![Page 10: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/10.jpg)
Introducción y configuración de Hibernate
![Page 11: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/11.jpg)
Arquitectura de Hibernate
![Page 12: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/12.jpg)
Arquitectura de Hibernate
![Page 13: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/13.jpg)
Hibernate en pocas palablas
SessionFactoryFactoría de Session
SessionEnvuelve JDBC ConnectionFactoría de Transaction
Persistencia de objetos y colecciones
![Page 14: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/14.jpg)
Añadir Hibernate al proyecto
Añadir las libreríasDriver JDBCHibernate*.jar y dependencias
Utilizar Hibernate Toolshttp://www.hibernate.org/subprojects/tools.html
![Page 15: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/15.jpg)
Configuración hibernate.cfg.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory name="SFactory">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/sakila</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
</session-factory>
</hibernate-configuration>
![Page 16: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/16.jpg)
Configuración de depuración
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
![Page 17: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/17.jpg)
Creando una conexión
// A SessionFactory is set up once for an application
sessionFactory = new Configuration()
.configure() // configures settings from hibernate.cfg.xml
.buildSessionFactory();
![Page 18: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/18.jpg)
Ejercicio
Crear un proyectoAñadir las librerías necesariasIncluir las librerías en el Build PathCrear un hibernate.cfg.xml con ToolsCrear un SessionFactory
![Page 19: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/19.jpg)
Introducción a ORM
![Page 20: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/20.jpg)
Java Annotations
Conocidos para documentación@Author
Apuntes para el compilador@SuppressWarnings("unchecked")@Override
Añaden funcionalidad
![Page 21: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/21.jpg)
Creando una entidad
@Entity
@Table(name = "country")
public class Country implements java.io.Serializable {
@Id
@GeneratedValue
@Column(name = "country_id", unique = true, nullable = false)
private Short countryId
@Column(name = "country", nullable = false, length = 50)
private String country;
public Country() {
}
![Page 22: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/22.jpg)
Entity
Defi ne la clase como una entidadEs aconsejable que sea SerializableEs requisito que tenga un constructor vacío
![Page 23: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/23.jpg)
Table
Defi ne la tabla dónde reside la entidadPropiedades:
name nombre de la tabla
![Page 24: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/24.jpg)
Id
Defi ne el campo como claveSubrrogate keysSuele ir acompañado de @GeneratedValue
![Page 25: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/25.jpg)
Column
Defi ne el nombre de la columnaAñade restricciones
nullableunique length
![Page 26: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/26.jpg)
Añadir la entidad a Hibernate
En la confi guración de hibernate, añadir en mapping la clase.
![Page 27: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/27.jpg)
Ejercicio
Crear las clases:Country– Id– country
City– Id– city
Establecer los @Table y @Column
![Page 28: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/28.jpg)
Consultas y persistencia
![Page 29: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/29.jpg)
Consultar: createQuery
Utilizamos createQueryUtiliza una sintaxis similar a SQLNormalmente la utilizamos para devolver objetosEs útil el método list()
![Page 30: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/30.jpg)
Ejemplo
Query query = session.createQuery("SELECT j FROM Jugador j");
List<Jugador> result = query.list();
![Page 31: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/31.jpg)
Ejercicio
Listar el contenido de:CountryCity
con el formato:id: nombre
![Page 32: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/32.jpg)
Crear datos
session.beginTransaction();
Jugador j = new Jugador();
j.setNombre(“Carlos”);
session.save(j);
session.getTransaction().close();
![Page 33: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/33.jpg)
Ejercicio
Crear un país nuevo y guardarloProbar a guardarlo sin las transaccionesCrear una ciudad nueva y guardarlaComprobar el estado de la base de datos
![Page 34: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/34.jpg)
Modificar datos
Con el objeto que nos interese:session.update(o);
Es útil el método uniqueResult()
![Page 35: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/35.jpg)
Ejercicio
Elegir un país y cambiarle el nombreEjecutar una query que busque por el nombre, no el identifi cador
![Page 36: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/36.jpg)
Eliminar datos
delete(o);
![Page 37: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/37.jpg)
Ejercicio
Eliminar el país que hemos creado antesEliminar ciudades que empiecen por 'e'
![Page 38: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/38.jpg)
Asociaciones
![Page 39: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/39.jpg)
Relaciones OneToMany
Las bases de datos son relacionalesQueremos que nuestros objetos mantengan la relación cuando persistanVamos a verlo bilateralmente
![Page 40: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/40.jpg)
Ejemplo de OneToMany
Lado One:@OneToMany(mappedBy="jugador")
private List<Titulo> titulos = new ArrayList<Titulo>();
Lado Many:@ManyToOne
private Country country;
![Page 41: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/41.jpg)
Propiedades
Para ambas anotacionesfetch
fetch=FetchType.EAGER
cascade cascade=CascadeType.ALL
![Page 42: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/42.jpg)
@JoinColumn
No podemos utilizar @ColumnUtilizamos @JoinColumn
@JoinColumn(name="jugador_id")
![Page 43: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/43.jpg)
Ejercicio: consultas y relaciones
Establecer la relación entre City y CountryActivar la depuración de SQLEscenario 1:
Sin fi jar el fetch (LAZY) listar de al menos dos países sus ciudades
Escenario 2:Fijando el fetch a EAGER listar de al menos dos países sus ciudades
![Page 44: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/44.jpg)
Ejercicio: establecer relaciones
Escenario 1:Crear un país y guardarCrear una ciudad y asignarle el país creado y guardarloEste escenario no debería daros problemas
![Page 45: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/45.jpg)
Ejercicio: establecer relaciones
Escenario 2:Crear un paísCrear una ciudad y fi jar el país anteriorGuardar ciudadEste escenario provoca un fallo al intentar relacionar un país que no está guardadoEs necesario utilizar cascade
![Page 46: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/46.jpg)
Ejercicio: establecer relaciones
Escenario 3Crear un paísCrear una ciudadAñadir la ciudad a la lista de ciudades del paísGuardar paísEste escenario provoca el mismo error que antesEs necesario fi jar el país en la ciudad
![Page 47: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/47.jpg)
Caso práctico
![Page 48: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/48.jpg)
Diseño orientativo
![Page 49: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/49.jpg)
Ejercicio
Utilizar el código del otro caso como basePlantear un buen diseñoProporcionar para las entidades:
ListadoCreación y actualización de registrosEliminar un registro
Listado de las vistas (o consultas directas)Un ejemplo como si se llamara desde UI
![Page 50: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/50.jpg)
Ejercicio cont.
Procedimiento TareaNotifi cada, que elimine la notifi cación y muestre por pantalla la información de la tareaCrear un OrganizarTareas(persona) que asigne las tareas un día detrás de otroCrear un ReasignarTarea(tarea, persona) que intente asignar la tarea a esa persona y falle en caso de que esa persona ya tenga algo el mismo día
![Page 51: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/51.jpg)
Temas avanzados
![Page 52: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/52.jpg)
Secuencias de modificación
int n = session
.createQuery(
"UPDATE Country set country = 'Zambia' WHERE country = 'Carlos Landia'")
.executeUpdate();
![Page 53: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/53.jpg)
Otras asociaciones
@OneToOneEn algunos casos se puede embeber
@ManyToManyEs necesario crear una tabla intermedia@JoinTable
![Page 54: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/54.jpg)
Generación de SQL
Utilizamos hbm2ddlSe puede programar
Confi guration cfg = new Confi guration().confi gure(); SchemaExport schemaExport = new SchemaExport(cfg); schemaExport.create(false, true);
Se puede añadir a la confi guraciónhibernate.hbm2ddl.auto=create
![Page 55: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/55.jpg)
Herencia
Divergencias entre clase y tablaEn objetos es bastante comúnEn tablas no :)Hibernate permite herencias
![Page 56: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/56.jpg)
Estrategias de herencia
Una tabla por entidad@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
Una tabla por familia de clases@Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(
name = "BILLING_DETAILS_TYPE", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue(“CCC”)
Una tabla por subclase@Inheritance(strategy = InheritanceType.JOINED)
![Page 57: Bases de Datos en Java - Intro a Hibernate](https://reader036.vdocuments.mx/reader036/viewer/2022081802/54922adeb4795956138b5649/html5/thumbnails/57.jpg)
Más cosas
Entidades solo lecturaInterceptoresHQLCriteriaCache y optimización… http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/