miércoles, 15 de febrero de 2012

JPA (Java Persistence Application)

Basada en el modelo ORM (Object-Relational Mapping), en el que se crean Objetos Persistentes (POO) para la base de datos relacional.
Nosotros hemos usado hasta ahora  la  API que permite la ejecución de operaciones directamente sobre bases de datos desde el lenguaje de programación Java (JDBC)
Ahora JPA se encarga de crear una capa de persistencia intermedia entre la aplicación y la base de datos.Hibernate Annotation implementa a este standard.
Trabaja con anotaciones.Usando:@Entity, @Column, @Id, @ManyToOne, @OneToOne,... etc.Estas siempre van en sus correspondientes clases persistentes:
-Para crear una de ellas se hace New/Annotation..
-La clase debe implementar Serializable.
-La clase debe de ser un POJO(Plain Old Java Object):constructor vacio o por defecto,solo Getters y Setters.Tal vez Equals and HashCode.Son solo clases contenedoras de datos y no de negocios por lo que no tienen mas que hacer.
Anotaciones minimas:
-@Entity: Se usa para la clase.
-@Id:Para los métodos.
-@GeneratedValue(Strategy=GT.Table):es el autoincrementar para la tabla correspondiente.
Anotaciones para hacer las relaciones de las tablas:
-@ManyToOne: Se situa delante del método "get" del objeto(Many) que posee la relación (ToOne) con la clase.Ejemplo:
@ManyToOne()
 public Barrio getBarrio() {
return barrio;}


-@OneToMany:Se situa en el "get" de la lista que posee la clase(One) con la que tiene la relación (ToMany).Ejemplo:
@OneToMany(mappedBy = "barrio")
public List<Casa> getCasas() {
return casas;}


-@ManyToMany:Se situa en el "get" de la lista que posee la clase(Many) con la que tiene la relación (ToMany).Ejemplo:
@ManyToMany @JoinTable(name="CIUDAD_INMOBILIARIA", joinColumns= @JoinColumn(name="ciudad_id", referencedColumnName="id"), inverseJoinColumns= @JoinColumn(name="inmobiliaria_id", referencedColumnName="id")) public List <Inmobiliaria> getInmobiliarias() { return inmobiliarias; }


-@OneToOne:Se situa en el "get" de la lista que posee la clase(One) con la que tiene la relación (ToOne).A ambos lados de la relación deben estar anotados con @oneToOne.

@OneToOne(fetch=FetchType.LAZY,cascade={CascadeType.PERSIST,CascadeType.REMOVE},optional=false)
 private Direccion direccion;
 public Direccion getDireccion() {
return direccion;}  

http://pajarokillo.wordpress.com/2011/11/17/jpa-2-0-mapeando-relaciones-one-to-one/




Creando EntityManagerFactory: Fábrica de conexiones a la base de datos.
// obtener una instancia de EntityManagerFactory usando la clase
// Persistence
// Como consejo debemos guardar la instancia de este factory para
// que no vuelva a ser creado con el objeto Persistence debido a que
// tiene un costo considerable de construcción

EntityManagerFactory factory = Persistence.createEntityManagerFactory("MyPersistenceUnitName");

// obtener una instancia de EntityManager del factory
EntityManager em = factory.createEntityManager();

// Inicio de transacción
em.getTransaction().begin();


//buscar objeto y persistirlo
Employee emp=em.find(Employee.class,id)

// Consulta para obtener todos los empleados que trabajan en una
// división de trabajo especificada y tienen un promedio de 40
// horas trabajadas a la semana

Query query = em.createQuery("SELECT e " +
" FROM Employee e " +
" WHERE e.division.name = 'Research' " +
" AND e.avgHours > 40");


// obtener una lista de resultados
List results = query.getResultList ();
//obtener un solo resultado
String nombre=query.getResult();

// establecer salario a todos los empleados
for (Object res : results) {
Employee emp = (Employee) res;
emp.setSalary(emp.getSalary() * 1.1);}



//Comprometer todos los cambios que han sido //detectados dentro de la transacción en el que se actualizarán todos los //objetospersistentes que hayamos modificado 
 em.getTransaction().commit();


// liberar los recursos 
em.close();


Otros métodos del EntityManager:
//Hace un update
em.merge(emp);
//Hace un borrado
em.remove(emp)
//Es un commit poco a poco
em.flush( );

No hay comentarios:

Publicar un comentario