Tema 5. Hibernate
Tema 5. Hibernate
Tema 5. Hibernate
Hibernate I
Mario Marugán Cancio
Objetivos
▪ Mapeo objeto-relacional sin sql
Solo en la opción 1
1. Seleccionar
dependencies
</dependencies>
</project>
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 55
Crear el XML
hibernate.cfg.xml
▪ Estructura
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import
org.hibernate.boot.registry.StandardServiceRegi
stry;
import
org.hibernate.boot.registry.StandardServiceRegi
stryBuilder;
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("*** Creación de SessionFactory falló." +
ex);
throw new ExceptionInInitializerError(ex);
}
}
}
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 61
Necesario actualizar el
proyecto
import java.sql.Timestamp;
public Tramite(){
}
public Tramite(String tipoTram, Timestamp fhcTram) {
this.tipoTram = tipoTram;
this.fhcTram = fhcTram;
}
}
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 66
7. Mapping a Hibernate
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-mapping package=“dominio">
<class name="Tramite" table="Tramite">
<!-- Mapping del id -->
<id name="idTram" column="idTram">
<generator class="native"/>
</id>
public TramiteService() {
tramiteDao = new TramiteDaoImpl();
}
public void closeSession(){
tramiteDao.closeSession();
}
public void save(Tramite tramite) {
tramiteDao.save(tramite);
}
}
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 70
7. Mapping a Hibernate
▪ Crear el paquete dao
▪ Crear dentro la clase tramiteDao.java
▪ Crear dentro la clase tramiteImplDao.java
package dao;
import dominio.Tramite;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.Root;
import org.hibernate.Session;
import org.hibernate.Transaction;
import dominio.Tramite;
import util.HibernateUtil;
@Override
public void save(Tramite tramite) {
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(tramite);
tx.commit();
}
catch (Exception e) {
if(tx != null){
tx.rollback();
}
e.printStackTrace();
}
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 74
7. Mapping a Hibernate
}
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.Transaction;
import dominio.Tramite;
import service.TramiteService;
import util.HibernateUtil;
// Salvar el tramite
// insert into Tramite (tipoTram, fhcTram) values (?, ?)
tramiteService.save(tramite);
}
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 78
Contenido
▪ Bibliografía
1. Introducción
2. Tipos de ORM
3. Hibernate
4. Instalación
5. Creación de la Base de Datos
6. Creación de un proyecto en eclipse
7. Mapping a Hibernate
8. Anotaciones
9. HQL
10. Criteria
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 79
Nuevo proyecto con el
8. Anotaciones código anterior
Tema 5. Ejemplo 2 Comentarla
import java.sql.Timestamp;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id; Primary Key
import javax.persistence.Table;
@Entity
@Table(name = "Tramite")
public class Tramite {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int idTram;
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 82
Si la columna no se
8. Anotaciones llama igual en el
▪ Clase Tramite programa, que en la
BBDD
//@Column(name="TIPO_TRAM") //Nombre distinto en BBDD
private String tipoTram;
private Timestamp fhcTram;
public Tramite(){
@Override
public String toString() {
return "Tramite [idTram=" + idTram + ", tipoTram=" + tipoTram + ", fhcTram=" + fhcTram + "]";
}
}
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 84
Contenido
▪ Bibliografía
1. Introducción
2. Tipos de ORM
3. Hibernate
4. Instalación
5. Creación de la Base de Datos
6. Creación de un proyecto en eclipse
7. Mapping a Hibernate
8. Anotaciones
9. HQL
10. Criteria
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 85
9. HQL
@SuppressWarnings("unchecked")
Query<Tramite> query = session.createQuery("from Tramite where
tipoTram = :tipoTram");
query.setParameter("tipoTram", "Crédito");
// Construyendo la consulta
criteria.select(root);
List<Tramite> tramites =
session.createQuery(criteria).getResultList();
Última versión
▪ Para hacer consultas específicas, añadir la siguiente
librería. hibernate-jpamodelgen
import java.sql.Timestamp;
import javax.annotation.processing.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Tramite.class)
public abstract class Tramite_ {
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import dominio.Tramite;
import service.TramiteService;
import util.HibernateUtil;
// Salvar el tramite
// insert into Tramite (tipoTram, fhcTram) values (?, ?)
tramiteService.save(tramite);
List<Tramite> tramites = tramiteService.findAll();
System.out.println(tramites.toString());
tramites = tramiteService.findFiltrando("Crédito");
System.out.println(tramites.toString());
}
}
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 100
10. Criteria
▪ Actualizar Proyecto Acceso a Datos Tema 5
Ejemplo 3
▪ Mismo contenido que en anterior, pero con la clase Test
distinta
▪ Es posible que de error la clase Tramite_ Copiar todo el
directorio de un proyecto a otro
session.update(tramite);
tx.commit();
}
catch (Exception e) { Actualizo el objeto en
if(tx != null){ MySQL
tx.rollback();
}
e.printStackTrace();
}
}
Acceso a Datos. Tema 5. Hibernate I 23/11/2023 105
10. Criteria
▪ Clase Test
package test;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.Transaction;
import dominio.Tramite;
import service.TramiteService;
import util.HibernateUtil;
}
return tuples;
}
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.persistence.Tuple;
import org.hibernate.Session;
import org.hibernate.Transaction;
import dominio.Tramite;
import service.TramiteService;
import util.HibernateUtil;
System.out.println(tramites.toString());