La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

JEE Entity Enterprise Beans Herencia. 2009Ing. de Sistemas II2 Herencia y Polimorfismo en Entity Beans Los Entity Beans son clases Java comunes que soportan.

Presentaciones similares


Presentación del tema: "JEE Entity Enterprise Beans Herencia. 2009Ing. de Sistemas II2 Herencia y Polimorfismo en Entity Beans Los Entity Beans son clases Java comunes que soportan."— Transcripción de la presentación:

1 JEE Entity Enterprise Beans Herencia

2 2009Ing. de Sistemas II2 Herencia y Polimorfismo en Entity Beans Los Entity Beans son clases Java comunes que soportan herencia –Cuando se persisten, la herencia (variables en la superclase y en la subclase) debe ser tomada en cuenta. –Existen 3 estrategias para persistir la herencia. Para el curso vamos a utilizar sólo una: –Estrategia Single Table per Class. Los Entity Beans son clases Java comunes que soportan polimorfismo –Las subclases siempre se pueden usar en lugar de la clase padre Polimorfismo en Relaciones y en Consultas.

3 2009Ing. de Sistemas II3 Implementación de herencia en Entity Beans Estrategia Single Table per Class –La superclase y todas las subclases se persisten en la misma tabla. –Esta tabla tiene una columna por cada variable en la jerarquía. –Se utiliza una columna especial, eldiscriminador, que sirve para que el contenedor sepa cual es el tipo concreto de cada fila. –La mejor estrategia desde el punto de vista de Objetos

4 2009Ing. de Sistemas II4 Implementación de herencia en Entity Beans @Entity @Table(name="Articulo") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = Tipo", discriminatorType = DiscriminatorType.STRING) @DiscriminatorValue(A") public class Articulo implements Serializable { private long id; private String nombre; private float precio; private String origen; @Entity @Table(name="Articulo") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = Tipo", discriminatorType = DiscriminatorType.STRING) @DiscriminatorValue(A") public class Articulo implements Serializable { private long id; private String nombre; private float precio; private String origen; @Entity @DiscriminatorValue(S") public class Saco extends Articulo { private String color; private String talle;... @Entity @DiscriminatorValue(S") public class Saco extends Articulo { private String color; private String talle;... TipoIdPrecioNombre 1 ColorTalleOrigen 2 3 4S S A A... null Negro Rojo XL L null

5 2009Ing. de Sistemas II5 Implementación de polimorfismo en Entity Beans Saco saco = new Saco(); saco.setNombre(Blasier Otoman Irregular 2 Bot.); saco.setOrigen(Turquia); saco.setColor(Beige); saco.setTalle(50); … Factura factura = new Factura(); factura.setFecha(01-05-2007); factura.setTipo(B); … HashSet articulos = new HashSet(); articulos.add(saco); factura.setArticulos(articulos); Saco saco = new Saco(); saco.setNombre(Blasier Otoman Irregular 2 Bot.); saco.setOrigen(Turquia); saco.setColor(Beige); saco.setTalle(50); … Factura factura = new Factura(); factura.setFecha(01-05-2007); factura.setTipo(B); … HashSet articulos = new HashSet(); articulos.add(saco); factura.setArticulos(articulos);

6 JEE Entity Enterprise Beans Consultas

7 2009Ing. de Sistemas II7 Consultas en Entity Beans Para poder hacer busquedas de entidades existentes, necesitamos algún método de busqueda –A travéz del Entity Manager –No debería utilizar un lenguaje propietario de una base de datos en particular Para poder desarrollar aplicaciones portables –Las busquedas deberían ser sobre el modelo de objetos No sobre el modelo físico en la BD EJB3 soporta su propio lenguaje de consultas para Entity Beans –Ejecutado a travéz del Entity Manager –Basado en una versión de SQL estándar y portable EJB QL 3.0 –Todas las consultas son sobre las clases que comprende el modelo de objetos

8 2009Ing. de Sistemas II8 Consultas en Entity Beans: EJB QL 3.0 EJBQL 3.0 es un lenguaje basado en SQL ANSI Soporta consultas complejas –Agregación –Subselects –Group By, Having, Joins

9 2009Ing. de Sistemas II9 Consultas en Entity Beans: EntityManager API del EntityManager: –Creación, Actualización y Eliminación de instancias –Selección de instancias según la PK –Selección de instancias según consultas public interface EntityManager { public void persist(Object entity); // inserción public T merge(T entity); // actualización public void remove(Object entity); // eliminación public Object find(String entityName, Object primaryKey); // selección por PK public T find(Class entityClass, Object primaryKey); // --´´-- public void flush(); // sincronizar con BD public Query createQuery(String ejbqlString); // crear una consulta de selección public Query createNamedQuery(String name); // crear una consulta de selección por nombre public Query createNativeQuery(String sqlString); // crear una consulta de selección nativa public void refresh(Object entity); // sincronizar desde la BD... } public interface EntityManager { public void persist(Object entity); // inserción public T merge(T entity); // actualización public void remove(Object entity); // eliminación public Object find(String entityName, Object primaryKey); // selección por PK public T find(Class entityClass, Object primaryKey); // --´´-- public void flush(); // sincronizar con BD public Query createQuery(String ejbqlString); // crear una consulta de selección public Query createNamedQuery(String name); // crear una consulta de selección por nombre public Query createNativeQuery(String sqlString); // crear una consulta de selección nativa public void refresh(Object entity); // sincronizar desde la BD... }

10 2009Ing. de Sistemas II10 Consultas en Entity Beans: Ejecutar Consultas Las consultas se expresan como cadenas de EJBQL –Embebidas en el código –Externamente en metadata (named queries) Se ejecutan a travéz de la interface Query –Encapsula la consulta –Interfaz para asociar parámetros de ejecución –Control de paginado public List buscarArticuloPorNombre(String nombre) { return em.createQuery( "SELECT a FROM Articulo a WHERE a.nombre LIKE :nombreArt").setParameter(" nombreArt ", nombre).setMaxResults(10).getResultList(); } public List buscarArticuloPorNombre(String nombre) { return em.createQuery( "SELECT a FROM Articulo a WHERE a.nombre LIKE :nombreArt").setParameter(" nombreArt ", nombre).setMaxResults(10).getResultList(); } Creación de la consulta en código Declaración de parámetros Control de Paginación Asociación de parámetros Ejecución de Consulta

11 2009Ing. de Sistemas II11 Consultas en Entity Beans: Ejecutar Consultas Query API –Acceso a travéz del EntityManager // Interface para ejecutar consultas public interface Query { // Ejecuta la consulta y retorna el resultado como una Lista de Objetos public List getResultList(); // Ejecuta una consulta que retorna un resultado único (ej: select max()) // @throws NonUniqueResultException si hay más de un resultado public Object getSingleResult(); // Declara el máximo numero de instancias a retornar public Query setMaxResults(int maxResult); // Asocia una variable a un parámetro en la consulta public Query setParameter(String name, Object value);... // Interface para ejecutar consultas public interface Query { // Ejecuta la consulta y retorna el resultado como una Lista de Objetos public List getResultList(); // Ejecuta una consulta que retorna un resultado único (ej: select max()) // @throws NonUniqueResultException si hay más de un resultado public Object getSingleResult(); // Declara el máximo numero de instancias a retornar public Query setMaxResults(int maxResult); // Asocia una variable a un parámetro en la consulta public Query setParameter(String name, Object value);...

12 2009Ing. de Sistemas II12 Consultas en Entity Beans: Ejemplos SELECT f FROM FACTURA f –Para identificar los objetos se utilizan Alias, el uso de AS para definir el alias es optativo SELECT f FROM FACTURA AS f –Retorna todas las instancias de Factura. SELECT f FROM FACTURA f WHERE f.monto > 100 –Retorna todas las instancias de Factura que tengan un valor mayor a 100 en su campo monto. SELECT f FROM FACTURA f WHERE f.monto > 100 AND f.fecha BETWEEN 01-05-07 AND 31-05-07 –Retorna todas las instancias de Factura que tengan un valor mayor a 100 en su campo monto y una fecha entre el 01-05-07 y el 31-05-07 en su campo fecha. SELECT f FROM FACTURA f WHERE f.tipo = :tipoFact –Retorna todas las instancias de Factura que tengan un valor igual al paremetro tipoFact en su campo tipo

13 2009Ing. de Sistemas II13 Consultas en Entity Beans: Ejemplos SELECT f FROM FACTURA f, IN (f.articulos) AS a WHERE a.origen = Turquia –Una consulta puede navegar relaciones –Retorna todas las instancias de Factura que tengan en su lista de Articulos, un articulo con el valor Turquia en su origen. SELECT f FROM FACTURA f WHERE f.cliente.pais = ARG –Una consulta puede navegar relaciones –Retorna todas las instancias de Factura que tengan una relacion con un objeto Cliente y este tenga un valor igual a ARG en su campo pais. SELECT a FROM ARTICULO a –Uso de polimorfismo en consultas. –Retorna todas las instancias de Articulo e instancias de subclases de Articulo (ej: Saco, Pantalon, etc.).

14 2009Ing. de Sistemas II14 Referencias Enterprise JavaBeans Query Languaje –http://java.sun.com/j2ee/tutorial/1_3- fcs/doc/EJBQL.html


Descargar ppt "JEE Entity Enterprise Beans Herencia. 2009Ing. de Sistemas II2 Herencia y Polimorfismo en Entity Beans Los Entity Beans son clases Java comunes que soportan."

Presentaciones similares


Anuncios Google