Académique Documents
Professionnel Documents
Culture Documents
Persistencia con JPA: Los componentes del Java Persistence API se encuentran en el paquete de javax.persistence JPA Est basado en annotations los cuales cuentan con la siguiente estructura:
@NombreAnotacion (parametro=valor, parametro2=Tipo.CONSTANTE) @Entity @Table (venta_mayoreo)
El acceso a bases de datos con el Java Persistence API, utiliza fuertemente los siguientes elementos: persistence.xml: Contiene la configuracin de la capa de Persistencia, la cual incluye: La Unidad de persistencia: Indica el nombre de la unidad de persistencia, la cual nos permite acceder a todos los recursos asignados a la conexin, tablas y entidades de la base de datos. La conexin a la base de datos : Indica el URL de acceso a datos, el Driver especfico de la base de datos. Transacciones: Indica el tipo de transacciones para la base de datos RESOURCE_LOCAL para Swing y JTA para aplicaciones Web y Empresariales. Entidades: Las entidades que estn mapeadas entre Java y la base de datos. EntityManagerFactory (EMF): Es el responsable de obtener la unidad de persistencia, la cual permitir ligar Java con el acceso a datos. La unidad de persistencia se puede obtener de la siguiente manera: EntityManagerFactory emf = Persistence.createEntityManagerFactory( "NombreUnidadPU"); EntityManager (EM): Es el responsable de actualizar y leer la base de datos utilizando las entidades descritas en Java. Un EntityManager se obtiene del EMF de la siguiente manera: EntityManager em = emf.createEntityManager();
Si no se describe la informacin de la columna utilizando la anotacin @Column se mapear utilizando el tipo equivalente en la base de datos y buscar un campo con el mismo nombre en la base de datos. Ver la Tabla 1. Si el campo de la llave primaria es un campo generado es necesario utilizar la anotacin de @GeneratedValue() acompaado de una estrategia, IDENTITY, TABLE, SEQUENCE, AUTO, . Las relaciones de uno a muchos, muchos a uno, muchos a muchos, se implementan utilizando Collections. Los tipos de datos de la tabla deben mapearse a los tipos de datos de Java: Base de Datos Integer Numeric Date TimeStamp Varchar, varchar2, char o text Blob Currency Java Integer o int Float, float, Double o double java.util.Date, java.sql.Date java.util.Date, java.sql.Date, java.sql.Timestamp String InputStream o byte[]. Depdende de la base de datos BigDecimal
Reglas bsicas Las entidades se declaran utilizando annotations a travs de los Plain Old Java Objects (POJO), los cuales no son ms que clases sencillas de Java, con propiedades y mtodos set y get. Es muy importante sealar que al utilizar anotaciones en Java, no se termina la instruccin con punto y coma. Se toman en cuenta algunas de las siguientes reglas: Cada clase que se desea utilizar en la capa de persistencia, debe tener la anotacin de @Entity En caso de que el nombre de la tabla, no coincida con el nombre de la clase se utiliza la anotacin @Table("nombreTabla") Cada una de las propiedades de la clase est mapeada a un campo de una tabla en la base de datos (a menos de que sea transitiva, @Transient).
Versin 1.2
Pgina 1 de 5
Consultas: Las consultas en JPA se generar a partir de los Objetos generados en Java que utilicen el Annotation @Entity. Las consultas se crean utilizando EJB-QL el cual obliga a utilizar el nombre de las clases no el de las tablas. Por ejemplo: Si se cuenta con la tabla cuenta_cliente, y una clase CuentaCliente, la consulta se crea utilizando la clase CuentaCliente y sus propiedades:
SELECT cc FROM CuentaCliente cc WHERE cc.cliente.nombre LIKE :param
Para ejecutar la consulta se utiliza el objeto javax.persistence.Query el cual se obtiene del EntityManager. Ejemplo:
Query query = em.createQuery(SELECT cc FROM CuentaCliente); List<CuentaCliente> cuentas = query.getResultList();
One-to-One(uno a uno)
Cada instancia de una entidad est relacionada a una sola instancia de otra entidad. Se indica con la anotacin @OneToOne
@Entity public class Empleado { ... @OneToOne @JoinColumn(name="usuario", referencedColumnName = "usuario", unique = true, nullable = true, updatable = false) private Usuario usuario; ... } @Entity public class Usuario { ... @OneToOne(mappedBy="usuario") private Empelado empleado; ... }
Versin 1.2
Pgina 2 de 5
mappedBy en la forma inversa de la relacin. Es decir se utilizar por ejemplo el @ManyToOne que defina el lado opuesto de la relacin. Many-to-One (muchos a uno) Muchas intancias de una clase se relacionan a una sola instancia de otra clase (es la versin inversa de One to Many). Se indica con la anotacin @ManyToOne
@Entity public class Empleado { ... @ManyToOne @JoinColumn(name="id_departamento", nullable=false) public Departamento departamento; } ... }
Many-to-Many (muchos a muchos) Las instancias de una entidad se pueden relacionar con mltiples entidades de otra clase y viceversa. Un ejemplo sera un estudiante que tiene muchas clases y una clase que tiene muchos estudiantes a su vez. Se indica con la anotacin @ManyToMany
@Entity public class Empleado { ... @ManyToMany(fetch=FetchType.EAGER) @JoinTable( name="empleado_asignado", schema="public", joinColumns={ JoinColumn(name="id_empleado", referencedColumnName="numero_empleado") }, inverseJoinColumns={ @JoinColumn(name="id_proyecto", referencedColumnName="id_proyecto") } ) private Set<Proyecto> proyectosAsignados; @Entity public class Proyecto { ... @ManyToMany(mappedBy="proyectosAsignados") private Set<Empleado> empleados; ... }
Attributos de un @OneToMany cascade (Opcional ) Default: Un array vacio que contiene elementos del tipo CascadeType. Por default JPA no asigna ninguna operacin de cascada en una asociacin, sin embargo se pueden utilizar los siguientes tipos de operaciones en Cascada: ALL - Se realizan los cambios en las entidades sealadas por la operacin en cualquier operacin de persistencia realizada. MERGE - Si se realiza una operacin de actualizacin en la entidad se realizarn los cambios en las entidades sealadas por el @OneToMany. PERSIST -Si se realiza una operacin de escritura en la entidad se agregarn las entidades sealadas por el @OneToMany.. REFRESH - Si se realiza una actualizacin en la entidad se realizarn los cambios en las entidades sealadas por el @OneToMany.. REMOVE - Si se realiza una operacin que implique eliminar una entidad entidad se eliminarn las entidades sealadas por el @OneToMany.. mappedBy (Opcional) Opcional: Depende si es unidireccional o bidireccional Default: Si la relacin es unidereccional el proveedor de persistencia determinar el campo que contiene la unin. Si la relacin es bidireccional, es necesario definir el
Versin 1.2
Pgina 3 de 5
La unidad de persistencia sea de tipo RESOURCE_LOCAL para Swing y Tomcat, y JTA en caso de que utilice un Servidor de aplicaciones. La conexin cuente con un: url usuario y password Driver Dialecto Proveedor en caso de Hibernate El pool de conexiones se encuentra registrado en el archivo, si est utilizando alguno.
Mapeo de propiedades:
Versin 1.2
Pgina 5 de 5