1 / 34

Java Persistance API

Java Persistance API. JPA. ¿Qué es una Entidad?. ¿Qué es una entidad?. Plain Old Java Object (POJO) Se crean por medio de la palabra reservada new No se requieren interfaces Tiene una identidad de persistencia Puede tener estados tanto persistentes como no persistentes

jered
Download Presentation

Java Persistance API

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java Persistance API JPA

  2. ¿Qué es una Entidad?

  3. ¿Qué es una entidad? • PlainOld Java Object(POJO) • Se crean por medio de la palabra reservada new • No se requieren interfaces • Tiene una identidad de persistencia • Puede tener estados tanto persistentes como no persistentes • Tipos Simples (ej. primitivos, enums ..) • Estados no persistentes (transient o @Transient) • Permite herencia entre entidades • Serializable; usable como objetos separados en otras capas • No necesitan objetos de transferencia de datos

  4. Ejemplo de Entidad @Entity public class Customer implements Serializable { @Id protected Long id; protectedStringname; @EmbeddedprotectedAddressaddress; protectedPreferredStatus status; @TransientprotectedintorderCount; publicCustomer() {} public Long getId() {return id;} protected void setId(Long id) {this.id = id;} public String getName() {return name;} public void setName(String name) {this.name = name;} … }

  5. Llave primaria (Pk- Id) de la Entidad • Cada Entidad tiene una llave primaria (identity) de persistencia. • Puede corresponder a un tipo simple • @EmbeddedId – campo simple/propiedad en la clase entidad • @IdClass – corresponde a muchos campos Id en la clase entidad • Debe ser definido en la raíz de la jerarquía d eal entidad o clase padre mapeada

  6. Modelo de Programación

  7. Modelo de Programación de Persistencia de Java • La entidad es un POJO (no necesita implementar un EntityBean) • Uso de Annotations para denotar un POJO como una entidad (en lugar de un descriptor) // @Entityisanannotation // It annotates Employee POJO class to be Entity @Entity publicclassEmployee{ // Persistent/transientfields // Propertyaccessormethods // Persistencelogicmethods }

  8. Ejemplo de Entidad de Persistencia (1) Annotation denota que es Entidad @Entity publicclassCustomer { private Long id; privateStringname; privateAddressaddress; private Collection<Order> orders = new HashSet(); publicCustomer() {} @Id public Long getID() { return id; } protected void setID(Long id) { this.id = id; } ... @Id denota la llave primaria Métodos accesores para acceder el estado

  9. Ejemplo de Entidad de Persistencia (2) ... // Relationship between Customer and Orders @OneToMany publicCollection<Order> getOrders() { returnorders; } publicvoidsetOrders(Collection<Order> orders) { this.orders = orders; } // Otherbusinessmethods ... }

  10. Código de Cliente: De Java SE Client public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("EmployeeService); EntityManager em = emf.createEntityManager(); Collection emps = em.createQuery("SELECT e FROM Employee e") .getResultList(); // More codes

  11. Contexto de Persistencia y Manejador de Entidad PersistanceContext& Entity Manager (EM)

  12. Contexto de Persistencia y Manejador de Entidad • Contexto de Persistencia • Representa un conjunto de instancias de entidad administradas por la capa de persistencia en tiempo de ejecución • “Una instancia de Entidad es un estado administrado” significa que la instancia está contenida en un contexto de persistencia • Inclusión o exclusión de una entidad en/de el contexto de persistencia determina la salida de cualquier operación de persistencia en él • No es directamente accesible para la aplicación es accedido indirectamente a través del EM – el tipo de EM determina cómo un contexto de persistencia es creado y borrado • Manejador de Entidad (EM) • Realiza operaciones del ciclo de vida en entidades – administra el contexto de persistencia

  13. Operaciones de ciclo de vida de una Entidad

  14. Administrador de Entidad (EM) • En funcionalidad es similar a el HibernateSession, JDO PErsistanceManajer, etc • Controla el ciclo de vida de las entidades • persist() – inserta una entidad a la BD • remove() – remueve una entidad de la BD • merge() – sincroniza el estado de entidades separadas • refresh() – refresca el estado desde la BD

  15. Operación de Persistencia public Order createNewOrder(Customer customer) { Order order = new Order(customer); // Transitions new instances to managed. On the // next flush or commit, the newly persisted // instances will be inserted into the datastore. entityManager.persist(order); return order; }

  16. Operaciones de Búsqueda y Eliminación public void removeOrder(Long orderId) { Order order = entityManager.find(Order.class, orderId); // The instances will be deleted from the datastore // on the next flush or commit. Accessing a // removed entity has undefined results. entityManager.remove(order); }

  17. Operación de Merge public OrderLine updateOrderLine(OrderLine orderLine) { // The merge method returns a managed copy of // the given detached entity. Changes made to the // persistent state of the detached entity are // applied to this managed instance. return entityManager.merge(orderLine); }

  18. Transacciones

  19. Tipos de Transacciones • Dos tipos de transacciones • Transacciones de recurso local (Resource - local) • JTA (Java Transaction API) • Participan múltiples recursos • Transacciones XA distribuidas • El tipo de transacción es definido en la unidad de persistencia (archivo persistance.xml) • El valor default es JTA para JavaEE y RESOURCE_LOCAL para Java SE • EM administrado por un contendor utiliza transacciones de JTA • Propagación del contexto de persistencia con transacciones de JTA es gestionado por el contenedor – compartiendo el mismo contexto de persistencia entre múltiples EMs

  20. Transacciones Y Contexto de Persistencia • Las transacciones definen cuando las entidades nuevas, modificadas, o borradas so sincronizadas con la base de datos • La creación y uso del contexto de persistencia es determinado por el tipo de Transacción (Resource-local o JTA) y el atributo de Transacción (REQUIRED o ..)

  21. Mapeo a O/R

  22. Mapeo a O/R • Conjunto de annotations extenso definido por el mapeo • Relaciones • Joins • Tablas y columnas de BD • Generadores de secuencias de BD • Especificadas utilizando • Annotations en el código • Archivo de mapeo por separado

  23. Mapeos Simples @Entity(access=FIELD) publicclassCustomer { @Id int id; Stringname; @Column(name=“CREDIT”) intc_rating; @Lob Imagephoto; }

  24. Ejemplo de Mapeo O/R @Entity @Table(name="EMPLOYEE", schema="EMPLOYEE_SCHEMA") uniqueConstraints= {@UniqueConstraint(columnNames={"EMP_ID", "EMP_NAME"})} publicclass EMPLOYEE { ... @Column(name="NAME", nullable=false, length=30) public String getName() { return name; } }

  25. Relaciones de Entidades

  26. Relaciones de Entidades • Modela asociación entre entidades • Soporta relaciones tanto unidireccionales como bidireccionales • Relación unidireccional: Entidad A hace referencia a B, pero B no hace referencia a A • Cardinalidades • Uno a uno • Uno a muchos • Muchos a uno • Muchos a muchos

  27. Relaciones de Entidades: Ejemplo Muchos a Muchos @Entity publicclass Project { privateCollection<Employee> employees; @ManyToMany publicCollection<Employee> getEmployees() { returnemployees; } publicvoidsetEmployees(Collection<Employee> employees) { this.employees= employees; } ... }

  28. Comportamiento en Cascada • “Cascading” es utilizado para propagar el efecto de una operación en todas las entidades relacionadas • Cascade = PERSIST • Cascade= REMOVE • Cascade= MERGE • Cascade= REFRESH • Cascade= ALL

  29. QUERY

  30. Mejora a EJB-QL • Soporta queries dinámicos, además de queries prefabricados o queries estáticos • Queries polimórficos • Operaciones de actualización y eliminación en grandes bloques • Joins • Agrupaciones • Subqueries • Funciones de SQL Adicionales • UPPER, LOWER, TRIM, CURRENT_DATE

  31. Queries • Queries Estáticos • Definidos con metadatos de lenguaje de java o XML • Annotations: @NamedQuery, @NamedNativeQuery • Queries Dinámicos • El query se especifica en tiempo de ejecución • Utiliza Lenguaje de Query de Persistencia de Java o SQL • Parámetros nombrados o posicionados • El EM es fábrica de objetos de query • createNamedQuery, createQuery, createNativeQuery • Métodos de query para contolar resultados máximos, paginación, modo flush

  32. Queries Dinámicos // Build and execute queries dynamically at runtime. public List findWithName (String name) { return em.CreateQuery ( “SELECT c FROM Customer c ” + “WHERE c.name LIKE :custName”) .setParameter(“custName”, name) .setMaxResults(10) .getResultList(); }

  33. NamedQuery // Named queries are a useful way to create reusable queries @NamedQuery( name=“findCustomersByName”, queryString=“SELECT c FROM Customer c ” + “WHERE c.name LIKE :custName” ) @PersistenceContextpublicEntityManagerem; Listcustomers = em.createNamedQuery(“findCustomersByName”). setParameter(“custName”, “smith”).getResultList();

  34. Referencias Java Persistence API: Simplifying Persistence Sang Shin Java Technology Evangelist Sun Microsystems, Inc.

More Related