SlideShare uma empresa Scribd logo
1 de 50
Baixar para ler offline
Hibernate / JPA @luce
¿Cómo nos vamos a
organizar?
¿Cómo?
•
•
•
•

Introduciendo (un poco) teoría y realizando pequeños ejercicios/dinámicas
basadas en la teoría.
Intentaré que estén disponibles en red todos los ejercicios. Plantearé retos
adicionales si terminais rápidamente.
Podemos hacer dinámicamente un glosario de términos y preguntas al final
de las diapositivas.
Hablo muy rápido y presupongo cosas. Interrumpidme! Preguntad dudas!
Presentación (para youtube)*
•
•
•

Javier Gamarra (javier.gamarra@luceit.com / @nhpatt / http://nhpatt.com/)
Desarrollador en Luce I.T., una empresa dedicada a desarrollo Java
principalmente.
Llevo utilizando Hibernate desde hace 5 años.
¿Cómo?, de nuevo
•

El objetivo principal del curso es APRENDER.

•

Para aprender hay que estar interesado e involucrarse.

•

No muerdo.

•

Acepto críticas sobre la forma y el fondo! Feedback!
Referencias
Referencias *
•

Java Persistence with Hibernate de Gavin King (2º ed en marcha)

•

Referencias oficiales

•

Referencia oficial de 3.6 en español
Sesión 1
¿Por qué
Hibernate/JPA?
¿Por qué? *
•

•

Tradicionalmente…
o … se escribía el SQL a mano de las operaciones
o … con una query diferente para cada pantalla
o … con una query específica para cada modificación
o … y había que ajustar todas cuando algo cambiaba
Con suerte…
o … generabas las consultas automáticamente y cruzabas los dedos para
que el modelo de datos no cambiase demasiado
¿Por qué?
•
•

Acceso directo mediante SQL
O con un patrón:
o Capa de acceso a datos (DAO, OAD…)
 Una clase por cada tabla, que conoce su estructura
 Habitualmente, con objetos de transferencia (DTO, OT…)
¿Por qué?
•

Pero hay más formas (y mejores!):
o Mapeo O/R
 Capa que “traduce” entre tablas y objetos
 Gestor externo a ellas
o ActiveRecord
 Un objeto ← una (fila en una) tabla
 Las operaciones están en el propio objeto
¿Qué deberíamos saber?
•

Java.

•

Conocimientos básicos de desarrollo web con un servidor de aplicaciones.

•

Algo de SQL
¿Qué es
Hibernate/JPA?
¿Qué es Hibernate/JPA? -> Ejemplo *
•

Base de datos H2
o BD en JAVA (más fácil de montar que Oracle XE).
o Instalad h2-setup-2013-03-17! (en la carpeta hibernate)
o Y lanzad h2.bat (en C:Program Files (x86)|Archivos de programaH2bin)

•
•

o Consola local en localhost:8082, Conectar. (como Toad)
Probadlo!
Hay un script de prueba, insertadlo.
¿Qué es Hibernate/JPA? -> Ejemplo
•
•

Abrid Eclipse y lanzad el test HelloDatabaseHibernateAnotationsTest
o Run as JUnit Test
Qué hace?
o Una consulta a la base de datos
¿Qué es Hibernate/JPA? -> Ejemplo
•
•
•
•

SessionFactory
o Factoría de sesiones, thread safe, único en la aplicación.
Session
o Comunicación con la BD, not-thread-safe, mono-hilo, operación con la
base de datos.
Propiedades de Hibernate
o hibernate.cfg.xml/persistence.xml -> configuración de la BD.
Anotaciones
o Cruce entre los objetos (entidades) y la base de datos (tablas).
¿Qué es Hibernate/JPA? -> ORM *
•
•
•

Object Relational Mapper/Mapping
Tecnología que intenta solucionar el problema de comunicación entre las
bases de datos (relacionales) y los modelos Java (objetos).
Este problema se denomina 'object/relational paradigm mismatch'.
o Herencia, composición, polimorfismo?
¿Qué es Hibernate/JPA? -> ORM
•
•

Un ORM hace de 'puente' entre tablas y objetos, en base a hints, 'mapeos'.
Normalmente es más cosas:
o Un API para hacer operaciones CRUD
o Un lenguaje de consultas
o Una forma de establecer metadatos de 'mapeos'
o Técnicas de cacheo, optimización...
¿Qué es Hibernate/JPA? -> ORM
•

¿Por qué?
o Productividad -> soy más rápido escribiendo código

o Mantenibilidad -> más fácil añadir columnas
o Rendimiento -> no siempre escribo consultas 100% perfectas
o Independencia -> puedo cambiar de BD más fácilmente
¿Qué es Hibernate/JPA? -> Hibernate
•
•
•
•

ORM Open Source Java, LGPL
o Implementación de JPA, parte de EJB3.0, JEE 5
o @author: Gavin King 2001
o 2003 - Hibernate 2
o 2013 4Q - Hibernate 5
Contratación (no compra) por parte de Jboss
Mapeo mediante XML o anotaciones
Mapeo en atributos o propiedades
¿Qué es Hibernate/JPA? -> Hibernate *
•

•

XML o anotaciones
Lanzad HelloDatabaseHibernateXMLTest
o Véis diferencias?
o Eliminad las anotaciones de Test.java y probad.
o addClass/addAnotatedClass

•

Propiedades o atributos
o Quitad la anotación de @Id y pasadla al atributo (encima de private
Integer id)
¿Qué es Hibernate/JPA? -> Ejemplo
•
•
•

HelloDatabaseJPATest
HelloDatabaseJPAWithHibernateTest
Diferencias:
o Sintaxis diferente
o Persistence.xml (META-INF)
¿Qué es Hibernate/JPA? -> JPA
•

Java Persistence API (2006)

•

Una especificación oficial Java (JSR 220 y JSR 317)

•

Actualmente la versión 2.1 (2013)

•

Hibernate es una implementación de JPA (una de muchas)
¿Qué es Hibernate/JPA?
•

Librerías:
o hibernate-core es el núcleo de Hibernate
o hibernate-commons-annotations el soporte a anotaciones
o hibernate-entitymanager y jpa dan soporte a jpa, la segunda es opcional.
¿Cuál es la opción recomendada?
•

Yo personalmente, prefiero JPA con Hibernate (último ejemplo)
o Quiero anotaciones
o Me gusta más la sintaxis de session
o No quiero definir mapeos y marcar bien cuando uso algo de Hibernate...

•

No os preocupéis por el código de configuración, lo hace todo el servidor

•

Es muy muy raro cambiar de proveedor de JPA (menos raro cambiar de BD)
Persistencia de
entidades simples.
Persistencia de entidades simples
•

Una entidad de Hibernate con anotaciones es sólo:
o La clase anotada como @Entity
o Un campo anotado con @Id
o Un constructor sin argumentos (opcional, si hay algún constructor)
o Implementando Serializable (opcional, por CDI)
Persistencia de entidades simples
•

Sabiendo esto...
o Conseguir que funcione el test ListUsersTest

o [AVANZADO] Diferencias entre session.load y session.get?
Mapeos básicos *
•

Hay anotaciones indispensables:
o @Table

o @Column

•

Sirven para especificar atributos de las tablas y las columnas...

•

Uno de los más típicos es el nombre (name), probadlo!
Mapeos básicos
•

Probad a añadir una columna/campo más... con una restricción (nullable,
unique...)
o Se añade automáticamente por la configuración de hibernate.
o Junto con las restricciones...
Enfoques de desarrollo
•

•

Top-down: modelos primero -> típicamente, generación automática de tablas
con hibernate.hbm2ddl.auto
o create
o create-drop
o update
o validate (default)
Bottom-up: tablas primero -> típicamente, generación automática de
modelos con Eclipse
Mapeos básicos *
•

Otra propiedad muy importante es:
o @Transient.
o Para qué puede servir?
 ...

•

Probadlo!
Persistencia de entidades simples
•
•

Transacciones, triviales:

o Transaction tx = session.beginTransaction();
o tx.commit();

Soporta físicamente:
o JDBC
o JTA
o CMT
o Personalizadas...
Persistencia de entidades simples
•
•
•

•

Sabiendo cómo se comienza una transacción...
Y conociendo session.save()...
Guardad un nuevo usuario
o Transaction transaction = session.getTransaction()
o transaction.begin()
o session.save(new Usuario(ID;NOMBRE));
o transaction.commit();
Avanzado - save(), persist(), diferencias?
o Pista: tienen que ver con las transacciones...
Persistencia de entidades simples
•

Si tenéis problemas con los ids:
o Anotad el id con @GeneratedValue(strategy =
GenerationType.SEQUENCE)
o Luego volveremos sobre esto...
Persistencia de entidades simples
•

Ya que estamos...

•

Actualizad una entidad usuario

•

[Avanzado] probad las diferentes formas de guardar
Persistencia de entidades simples
•

Y completando el CRUD... eliminad un usuario
Relaciones simples.
Relaciones simples
•

En E-R, una relación entre tablas típica es una relación many-to-one.

•

En nuestro ejemplo, un usuario tiene un rol dentro de la aplicación.

•

En Hibernate es una relación many-to-one y se mapea con su anotación
específica.
Relaciones simples
•

Crear una entidad Rol (id, nombre...)

•

Guarda un Rol

•

Pruebalo!
Relaciones simples
•

Queremos modelar que un usuario puede tener un rol en un momento dado.

•

Para ello, definimos una entidad Rol dentro de usuario, con su getter y setter.

•

La anotamos con la propiedad @ManyToOne.

•

Y ya está, pruebalo! de momento guarda un rol y su usuario con su rol.
Recupera de BD la entidad usuario y mira a ver si conserva el rol...
Relaciones simples
•

Busca un rol de BD

•

Añade una atributo Rol en User (con @ManyToOne)

•

Guarda un rol en el User (usuario.setRol(rolBuscadoDeBaseDeDatos))

•

Recupera el User con un get (debería tener su rol asociado).
Recapitulando...
•
•
•

Mediante ORMs automatizamos esto:
o Clase ←→ Tabla
o Propiedad ←→ Columna
o Referencia a un objeto ←→ Relación 1-1 o *-1 con FK
o Colección de objetos ←→ Relación 1-* o *-* con join table
Las consultas (inserts, updates, deletes, DDL) se calculan dinámicamente
object-relational impedance mismatch
Más relaciones (para la próxima sesión)
•
•
•
•
•
•
•
•
•

@OneToOne
@OneToMany
@ManyToMany
...
Propietario?
Relaciones bidireccionales?
Mapas?
Tablas intermedias?
Orden?
Glosario
Glosario
•

...
FAQs
FAQs
•

...
Hibernate / JPA @luce

Mais conteúdo relacionado

Mais procurados

Servicios en Zend Framework 2
Servicios en  Zend Framework 2Servicios en  Zend Framework 2
Servicios en Zend Framework 2
El Taller Web
 
Slides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y buclesSlides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y bucles
matlab_usc
 
Threads en java
Threads en javaThreads en java
Threads en java
jent46
 
Estructura de un programa en c
Estructura de un programa en cEstructura de un programa en c
Estructura de un programa en c
Mary Guaman
 
Manual Instalación JLex & CUP
Manual Instalación JLex & CUPManual Instalación JLex & CUP
Manual Instalación JLex & CUP
rubeniii
 
Evasión de Técnicas Forenses
Evasión de Técnicas ForensesEvasión de Técnicas Forenses
Evasión de Técnicas Forenses
Conferencias FIST
 
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
GeneXus
 

Mais procurados (20)

Servicios en Zend Framework 2
Servicios en  Zend Framework 2Servicios en  Zend Framework 2
Servicios en Zend Framework 2
 
COMANDOS DE JAVA
COMANDOS DE JAVACOMANDOS DE JAVA
COMANDOS DE JAVA
 
Informe interprete sencillo irony y c sharp
Informe interprete sencillo irony y c sharpInforme interprete sencillo irony y c sharp
Informe interprete sencillo irony y c sharp
 
Slides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y buclesSlides sesion8 matlab - IF y bucles
Slides sesion8 matlab - IF y bucles
 
Threads en java
Threads en javaThreads en java
Threads en java
 
Monitorizando aplicaciones con AspectJ
Monitorizando aplicaciones con AspectJMonitorizando aplicaciones con AspectJ
Monitorizando aplicaciones con AspectJ
 
Estructura de un programa en c
Estructura de un programa en cEstructura de un programa en c
Estructura de un programa en c
 
FUNCIONES EN PHP
FUNCIONES EN PHPFUNCIONES EN PHP
FUNCIONES EN PHP
 
PCJ Sesión 9: Threads
PCJ Sesión 9: ThreadsPCJ Sesión 9: Threads
PCJ Sesión 9: Threads
 
Introducción a Kotlin para desarrolladores Java
Introducción a Kotlin para desarrolladores JavaIntroducción a Kotlin para desarrolladores Java
Introducción a Kotlin para desarrolladores Java
 
Presentación appy/pod
Presentación appy/podPresentación appy/pod
Presentación appy/pod
 
00 introducción a Python
00 introducción a Python00 introducción a Python
00 introducción a Python
 
Presentacion Spring Roo Java Mania
Presentacion Spring Roo Java ManiaPresentacion Spring Roo Java Mania
Presentacion Spring Roo Java Mania
 
Manual Instalación JLex & CUP
Manual Instalación JLex & CUPManual Instalación JLex & CUP
Manual Instalación JLex & CUP
 
Evasión de Técnicas Forenses
Evasión de Técnicas ForensesEvasión de Técnicas Forenses
Evasión de Técnicas Forenses
 
9.laravel
9.laravel9.laravel
9.laravel
 
Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Java
 
Objeto prepared statement
Objeto prepared statementObjeto prepared statement
Objeto prepared statement
 
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
0131 tu aplicacion_gene_xus_en_la_nube_lo_que_se_necesita
 
Comandos de java
Comandos de javaComandos de java
Comandos de java
 

Semelhante a Hibernate - JPA @luce

Información básica Java
Información básica JavaInformación básica Java
Información básica Java
FordBull2er
 
Java para android developers
Java para android developersJava para android developers
Java para android developers
jose diaz
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
Alberto Gimeno
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup
 

Semelhante a Hibernate - JPA @luce (20)

Persistencia de datos en Java
Persistencia de datos en JavaPersistencia de datos en Java
Persistencia de datos en Java
 
Hibernate - JPA @luce 2
Hibernate - JPA @luce 2Hibernate - JPA @luce 2
Hibernate - JPA @luce 2
 
jsf
jsfjsf
jsf
 
Introducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a ObjetosIntroducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a Objetos
 
Capítulo 09 construcción de objetos
Capítulo 09 construcción de objetosCapítulo 09 construcción de objetos
Capítulo 09 construcción de objetos
 
Reglas de Código Simple
Reglas de Código SimpleReglas de Código Simple
Reglas de Código Simple
 
El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Java para android developers
Java para android developersJava para android developers
Java para android developers
 
Java12
Java12Java12
Java12
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
 
Diapositivas de JAVA
Diapositivas de JAVADiapositivas de JAVA
Diapositivas de JAVA
 
Java 1.8:Road to Functional Language
Java 1.8:Road to Functional LanguageJava 1.8:Road to Functional Language
Java 1.8:Road to Functional Language
 
Programación en java
Programación en javaProgramación en java
Programación en java
 
JRuby al Rescate de J2EE
JRuby al Rescate de J2EEJRuby al Rescate de J2EE
JRuby al Rescate de J2EE
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Sesion03 apuntes
Sesion03 apuntesSesion03 apuntes
Sesion03 apuntes
 
Jpa
JpaJpa
Jpa
 
Fondo1 (2)
Fondo1 (2)Fondo1 (2)
Fondo1 (2)
 
Hawk: indexado de modelos en bases de datos NoSQL
Hawk: indexado de modelos en bases de datos NoSQLHawk: indexado de modelos en bases de datos NoSQL
Hawk: indexado de modelos en bases de datos NoSQL
 

Mais de Javier Gamarra

Mais de Javier Gamarra (13)

Performance myths in android
Performance myths in androidPerformance myths in android
Performance myths in android
 
RxJava in practice
RxJava in practice RxJava in practice
RxJava in practice
 
Cambiar una empresa con juegos ágiles
Cambiar una empresa con juegos ágilesCambiar una empresa con juegos ágiles
Cambiar una empresa con juegos ágiles
 
New Android Languages
New Android LanguagesNew Android Languages
New Android Languages
 
5 meses de juegos ágiles
5 meses de juegos ágiles5 meses de juegos ágiles
5 meses de juegos ágiles
 
Opinionated android
Opinionated androidOpinionated android
Opinionated android
 
Arduino - Cuarta sesión
Arduino - Cuarta sesiónArduino - Cuarta sesión
Arduino - Cuarta sesión
 
Arduino - Tercera sesión
Arduino - Tercera sesiónArduino - Tercera sesión
Arduino - Tercera sesión
 
Hibernate - JPA @luce 5
Hibernate - JPA @luce 5Hibernate - JPA @luce 5
Hibernate - JPA @luce 5
 
Hibernate - JPA @luce 4
Hibernate - JPA @luce 4Hibernate - JPA @luce 4
Hibernate - JPA @luce 4
 
Hibernate - JPA @luce 3
Hibernate - JPA @luce 3Hibernate - JPA @luce 3
Hibernate - JPA @luce 3
 
Codemotion 2013
Codemotion 2013Codemotion 2013
Codemotion 2013
 
CAS 2013
CAS 2013CAS 2013
CAS 2013
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (12)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

Hibernate - JPA @luce

  • 2. ¿Cómo nos vamos a organizar?
  • 3. ¿Cómo? • • • • Introduciendo (un poco) teoría y realizando pequeños ejercicios/dinámicas basadas en la teoría. Intentaré que estén disponibles en red todos los ejercicios. Plantearé retos adicionales si terminais rápidamente. Podemos hacer dinámicamente un glosario de términos y preguntas al final de las diapositivas. Hablo muy rápido y presupongo cosas. Interrumpidme! Preguntad dudas!
  • 4. Presentación (para youtube)* • • • Javier Gamarra (javier.gamarra@luceit.com / @nhpatt / http://nhpatt.com/) Desarrollador en Luce I.T., una empresa dedicada a desarrollo Java principalmente. Llevo utilizando Hibernate desde hace 5 años.
  • 5. ¿Cómo?, de nuevo • El objetivo principal del curso es APRENDER. • Para aprender hay que estar interesado e involucrarse. • No muerdo. • Acepto críticas sobre la forma y el fondo! Feedback!
  • 7. Referencias * • Java Persistence with Hibernate de Gavin King (2º ed en marcha) • Referencias oficiales • Referencia oficial de 3.6 en español
  • 10. ¿Por qué? * • • Tradicionalmente… o … se escribía el SQL a mano de las operaciones o … con una query diferente para cada pantalla o … con una query específica para cada modificación o … y había que ajustar todas cuando algo cambiaba Con suerte… o … generabas las consultas automáticamente y cruzabas los dedos para que el modelo de datos no cambiase demasiado
  • 11. ¿Por qué? • • Acceso directo mediante SQL O con un patrón: o Capa de acceso a datos (DAO, OAD…)  Una clase por cada tabla, que conoce su estructura  Habitualmente, con objetos de transferencia (DTO, OT…)
  • 12. ¿Por qué? • Pero hay más formas (y mejores!): o Mapeo O/R  Capa que “traduce” entre tablas y objetos  Gestor externo a ellas o ActiveRecord  Un objeto ← una (fila en una) tabla  Las operaciones están en el propio objeto
  • 13. ¿Qué deberíamos saber? • Java. • Conocimientos básicos de desarrollo web con un servidor de aplicaciones. • Algo de SQL
  • 15. ¿Qué es Hibernate/JPA? -> Ejemplo * • Base de datos H2 o BD en JAVA (más fácil de montar que Oracle XE). o Instalad h2-setup-2013-03-17! (en la carpeta hibernate) o Y lanzad h2.bat (en C:Program Files (x86)|Archivos de programaH2bin) • • o Consola local en localhost:8082, Conectar. (como Toad) Probadlo! Hay un script de prueba, insertadlo.
  • 16. ¿Qué es Hibernate/JPA? -> Ejemplo • • Abrid Eclipse y lanzad el test HelloDatabaseHibernateAnotationsTest o Run as JUnit Test Qué hace? o Una consulta a la base de datos
  • 17. ¿Qué es Hibernate/JPA? -> Ejemplo • • • • SessionFactory o Factoría de sesiones, thread safe, único en la aplicación. Session o Comunicación con la BD, not-thread-safe, mono-hilo, operación con la base de datos. Propiedades de Hibernate o hibernate.cfg.xml/persistence.xml -> configuración de la BD. Anotaciones o Cruce entre los objetos (entidades) y la base de datos (tablas).
  • 18. ¿Qué es Hibernate/JPA? -> ORM * • • • Object Relational Mapper/Mapping Tecnología que intenta solucionar el problema de comunicación entre las bases de datos (relacionales) y los modelos Java (objetos). Este problema se denomina 'object/relational paradigm mismatch'. o Herencia, composición, polimorfismo?
  • 19. ¿Qué es Hibernate/JPA? -> ORM • • Un ORM hace de 'puente' entre tablas y objetos, en base a hints, 'mapeos'. Normalmente es más cosas: o Un API para hacer operaciones CRUD o Un lenguaje de consultas o Una forma de establecer metadatos de 'mapeos' o Técnicas de cacheo, optimización...
  • 20. ¿Qué es Hibernate/JPA? -> ORM • ¿Por qué? o Productividad -> soy más rápido escribiendo código o Mantenibilidad -> más fácil añadir columnas o Rendimiento -> no siempre escribo consultas 100% perfectas o Independencia -> puedo cambiar de BD más fácilmente
  • 21. ¿Qué es Hibernate/JPA? -> Hibernate • • • • ORM Open Source Java, LGPL o Implementación de JPA, parte de EJB3.0, JEE 5 o @author: Gavin King 2001 o 2003 - Hibernate 2 o 2013 4Q - Hibernate 5 Contratación (no compra) por parte de Jboss Mapeo mediante XML o anotaciones Mapeo en atributos o propiedades
  • 22. ¿Qué es Hibernate/JPA? -> Hibernate * • • XML o anotaciones Lanzad HelloDatabaseHibernateXMLTest o Véis diferencias? o Eliminad las anotaciones de Test.java y probad. o addClass/addAnotatedClass • Propiedades o atributos o Quitad la anotación de @Id y pasadla al atributo (encima de private Integer id)
  • 23. ¿Qué es Hibernate/JPA? -> Ejemplo • • • HelloDatabaseJPATest HelloDatabaseJPAWithHibernateTest Diferencias: o Sintaxis diferente o Persistence.xml (META-INF)
  • 24. ¿Qué es Hibernate/JPA? -> JPA • Java Persistence API (2006) • Una especificación oficial Java (JSR 220 y JSR 317) • Actualmente la versión 2.1 (2013) • Hibernate es una implementación de JPA (una de muchas)
  • 25. ¿Qué es Hibernate/JPA? • Librerías: o hibernate-core es el núcleo de Hibernate o hibernate-commons-annotations el soporte a anotaciones o hibernate-entitymanager y jpa dan soporte a jpa, la segunda es opcional.
  • 26. ¿Cuál es la opción recomendada? • Yo personalmente, prefiero JPA con Hibernate (último ejemplo) o Quiero anotaciones o Me gusta más la sintaxis de session o No quiero definir mapeos y marcar bien cuando uso algo de Hibernate... • No os preocupéis por el código de configuración, lo hace todo el servidor • Es muy muy raro cambiar de proveedor de JPA (menos raro cambiar de BD)
  • 28. Persistencia de entidades simples • Una entidad de Hibernate con anotaciones es sólo: o La clase anotada como @Entity o Un campo anotado con @Id o Un constructor sin argumentos (opcional, si hay algún constructor) o Implementando Serializable (opcional, por CDI)
  • 29. Persistencia de entidades simples • Sabiendo esto... o Conseguir que funcione el test ListUsersTest o [AVANZADO] Diferencias entre session.load y session.get?
  • 30. Mapeos básicos * • Hay anotaciones indispensables: o @Table o @Column • Sirven para especificar atributos de las tablas y las columnas... • Uno de los más típicos es el nombre (name), probadlo!
  • 31. Mapeos básicos • Probad a añadir una columna/campo más... con una restricción (nullable, unique...) o Se añade automáticamente por la configuración de hibernate. o Junto con las restricciones...
  • 32. Enfoques de desarrollo • • Top-down: modelos primero -> típicamente, generación automática de tablas con hibernate.hbm2ddl.auto o create o create-drop o update o validate (default) Bottom-up: tablas primero -> típicamente, generación automática de modelos con Eclipse
  • 33. Mapeos básicos * • Otra propiedad muy importante es: o @Transient. o Para qué puede servir?  ... • Probadlo!
  • 34. Persistencia de entidades simples • • Transacciones, triviales: o Transaction tx = session.beginTransaction(); o tx.commit(); Soporta físicamente: o JDBC o JTA o CMT o Personalizadas...
  • 35. Persistencia de entidades simples • • • • Sabiendo cómo se comienza una transacción... Y conociendo session.save()... Guardad un nuevo usuario o Transaction transaction = session.getTransaction() o transaction.begin() o session.save(new Usuario(ID;NOMBRE)); o transaction.commit(); Avanzado - save(), persist(), diferencias? o Pista: tienen que ver con las transacciones...
  • 36. Persistencia de entidades simples • Si tenéis problemas con los ids: o Anotad el id con @GeneratedValue(strategy = GenerationType.SEQUENCE) o Luego volveremos sobre esto...
  • 37. Persistencia de entidades simples • Ya que estamos... • Actualizad una entidad usuario • [Avanzado] probad las diferentes formas de guardar
  • 38. Persistencia de entidades simples • Y completando el CRUD... eliminad un usuario
  • 40. Relaciones simples • En E-R, una relación entre tablas típica es una relación many-to-one. • En nuestro ejemplo, un usuario tiene un rol dentro de la aplicación. • En Hibernate es una relación many-to-one y se mapea con su anotación específica.
  • 41. Relaciones simples • Crear una entidad Rol (id, nombre...) • Guarda un Rol • Pruebalo!
  • 42. Relaciones simples • Queremos modelar que un usuario puede tener un rol en un momento dado. • Para ello, definimos una entidad Rol dentro de usuario, con su getter y setter. • La anotamos con la propiedad @ManyToOne. • Y ya está, pruebalo! de momento guarda un rol y su usuario con su rol. Recupera de BD la entidad usuario y mira a ver si conserva el rol...
  • 43. Relaciones simples • Busca un rol de BD • Añade una atributo Rol en User (con @ManyToOne) • Guarda un rol en el User (usuario.setRol(rolBuscadoDeBaseDeDatos)) • Recupera el User con un get (debería tener su rol asociado).
  • 44. Recapitulando... • • • Mediante ORMs automatizamos esto: o Clase ←→ Tabla o Propiedad ←→ Columna o Referencia a un objeto ←→ Relación 1-1 o *-1 con FK o Colección de objetos ←→ Relación 1-* o *-* con join table Las consultas (inserts, updates, deletes, DDL) se calculan dinámicamente object-relational impedance mismatch
  • 45. Más relaciones (para la próxima sesión) • • • • • • • • • @OneToOne @OneToMany @ManyToMany ... Propietario? Relaciones bidireccionales? Mapas? Tablas intermedias? Orden?
  • 48. FAQs