Sei sulla pagina 1di 25

Universidad Francisco Gavidia

Estructuras de Datos

Java Persistence API (JPA) proporciona un estndar para gestionar datos relacionales en aplicaciones Java SE o Java EE, de forma que adems se simplifique el desarrollo de la persistencia de datos.
Es una API de persistencia de POJOs (Plain Old Java Object). Es decir, objetos simples que no heredan ni implementan otras clases (como los EJBs).
Requerimientos de aprendizaje: Programacin Orientada a objetos Anotaciones en Java 5 Base de datos relacionales Lenguaje estructurado de consultas (SQL)

Hibernate

JDO

En su definicin, ha combinado ideas y conceptos de los principales frameworks de persistencia, como Hibernate, Toplink y JDO, y de las versiones anteriores de EJB. Todos estos cuentan actualmente con una implementacin JPA.
El mapeo objeto-relacional (es decir, la relacin entre entidades Java y tablas de la base de datos, queries con nombre, etc) se realiza mediante anotaciones en las propias clases de entidad. No se requieren ficheros descriptores XML. Tambin pueden definirse transacciones como anotaciones JPA.

TopLink

El mapeo objeto/relacional, es decir, la relacin entre entidades Java y tablas de la base de datos, se realiza mediante anotaciones en las propias clases de entidad, por lo que no se requieren ficheros descriptores XML. Tambin pueden definirse transacciones como anotaciones JPA.

<?xml?>

@anotacin

Las anotaciones de JPA se clasifican en dos categoras: @Anotaciones

Mapeo Lgico
Permiten describir modelo de objeto, asociaciones de clase, etc

Mapeo Fsico
Describen esquemas fsicos de base de datos, tablas, columnas, ndices, etc.

@OneToOne,@OneToMany,etc

@Column,@JoinColumn,etc

El siguiente diagrama muestra la relacin entre los componentes principales de la arquitectura de JPA:

A continuacin mostraremos la arquitectura que JPA tiene para el control de las excepciones:

Persistance

Persistance.xml

EntityManagerFactory

Persistance Unit Name Persistance Library(Provider) Entities Provider settings

EntityManager

EntityManager

EntityManager.persist(Entidad). Las entidades son simples pojos (Plain old Java objets) hasta que entran en estado managed(manejado) y luego hechos persistentes por un EntityManager. La siguiente lnea de cdigo nos muestra una entidad persistente y manejada. Persona persona=new Persona(); entityManager.getTransaction().begin(); persona.set(...) entityManager.persist(persona); entityManager.getTransaction().commit();
Cuando el mtodo persist() es llamado, el motor de persistencia revisar la existencia del objeto con la ayuda de su identificador nico (usualmente representada en la forma de llave primaria). Si un objeto duplicado es encontrado, entonces se lanzar una RunTime exception, EntityExistsException.

EntityManager.find(class , object) El mtodo find() recibe como parmetros la clase de la entidad y valor de la llave primaria para buscar un solo objeto entidad.
Si el objeto que estamos buscando no puede ser localizado por la clase EntityManager,entonces este mtodo simplemente retornar null.Ver la siguiente lnea de cdigo: int id=1; Persona persona=entityManager.find(Persona.class, id); if(persona!=null){ //Hacer algo con la persona... } else { //No se encontr a la persona... }
Lo bueno sobre el mtodo find() es que la entidad se convierte en objeto manejado en nuestro contexto de persistencia del EntityManager.

EntityManager.remove(entidad) Para eliminar una entidad de la base de datos se debe invocar el metodo EntityManager.remove(EntityObject). Para poder eliminar una entidad, esta debe ser una entidad manejada por que sino la operacin fallar. Luego de invocar este mtodo, la entidad entrar a fase desprendido (detached) del contexto de persistencia y no ser una entidad manejada. entityManager.getTransaction().begin(); Persona persona=entityManager.find(Persona.class, 1); entityManager.remove(persona); entityManager.getTransaction().commit();

Actualizando Entidades

EntityManager.merge(entidad) Para actualizar una entidad en la base de datos se debe invocar el metodo EntityManager.merge(EntityObject). Para poder actualizar una entidad, esta debe ser una entidad manejada por que sino la operacin fallar.

persona=entityManager.find(Persona.class, id); entityManager.getTransaction().begin(); persona.setApellido(Olivares); entityManager.merge(persona); entityManager.getTransaction().commit(); System.out.println("Actualizacion exitosa");

Tabla en base de datos

Clase Persona.java

Creacin de la clase Persona.java package model; public class Persona implements Serializable{ @Id @Column(name="id") @GeneratedValue(strategy=GenerationType.AUTO) private Long id=null; @Column(name="nombre") private String nombre; @Column(name="apellido") private String apellido; @Column(name="fecha_nacimiento") @Temporal(TemporalType.DATE) private Date fechaNacimiento; //setters and getters }

Archivo de configuracin del motor de persistencia persistence,xml


<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="ProyectoJPA_PU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>model.Persona</class> <properties> <property name="hibernate.connection.username" value=username"/> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> <property name="hibernate.connection.password" value=password"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/mi_base_de_datos"/> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/> </properties> </persistence-unit> </persistence>

Creacin de la clase JpaUtil.java


package util; Public class JpaUtil { private static final EntityManagerFactory emf; static{ try{ emf=Persistence.createEntityManagerFactory("ProyectoJPA_PU"); } catch (Throwable ex) { // Log the exception. System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static EntityManagerFactory getEntityManagerFactory(){ return emf; } }

Creacin de la clase Persona.java


@Entity @Table(name="persona") public class Persona implements Serializable{ private static final long serialVersionUID = -436540065081698326L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") private Long id=null; @Column(name="nombre") private String nombre; @Column(name="apellido") private String apellido; @Temporal(TemporalType.DATE) @Column(name="fecha_nacimiento") private Date fechaNacimiento; //setters and getters

Creacin del mtodo: crearPersona


public void crearPersona(Persona persona){ EntityManager em=JpaUtil.getEntityManagerFactory().createEntityManager(); em.getTransaction().begin(); try{ em.persist(persona); em.getTransaction().commit(); }catch(Exception ex){ em.getTransaction().rollback(); System.out.println("Ha ocurrido un error al guardar"); } finally{ em.close(); } }

Creacin del mtodo: buscarPersona


public Persona buscarPersona(int id){ EntityManager em=JpaUtil.getEntityManagerFactory().createEntityManager(); Persona persona=null; try{ persona=em.find(Persona.class, id); }catch(Exception ex){ System.out.println(Ha ocurrido un error"); ex.printStackTrace(); } finally{ em.close(); } return persona; }

Creacin del mtodo: actualizarPersona


public void actualizarPersona(Persona persona){ EntityManager em=JpaUtil.getEntityManagerFactory().createEntityManager(); em.getTransaction().begin(); try{ em.merge(persona); System.out.println("Actualizacion exitosa"); em.getTransaction().commit(); }catch(Exception ex){ em.getTransaction().rollback(); System.out.println("Ha ocurrido un error al actualizar"); ex.printStackTrace(); } finally{ em.close(); } }

Creacin del mtodo: eliminarPersona


public void eliminarPersona(int id){ EntityManager em=JpaUtil.getEntityManagerFactory().createEntityManager(); em.getTransaction().begin(); try{ Persona p=buscarPersona.find(id); em.remove(p); em.getTransaction().commit(); }catch(Exception ex){ em.getTransaction().rollback(); ex.printStackTrace(); } finally{ em.close(); } }

Potrebbero piacerti anche