Ing. Elkin Doney Suárez Gómez Esp. Gerencia de Proyectos Candidato MBA edsuarez@uis.edu.

co

JAVA PERSISTENCE API JPA
Diplomado Especializado en Diseño y Desarrollo de Aplicaciones Distribuidas con Arquitectura Java EE

¿ QUE ES JAVA PERSISTENCE API?

Es un modelo de persistencia basado en POJOs para mapear bases de datos relacionales en Java. Es un modelo de persistencia que usa anotaciones en las entidades, no se requiere usar archivos descriptores XML. Es un modelo de persistencia que consiste en 4 áreas:
JPA (javax.persistence).  El lenguaje de consultas.  La Java Persistence Criteria API.  La metadata del mapeo objeto/relacional.

persistence. @Table(name =“nombre_base_datos:nombre_tabla") del paquete (javax. Con está anotación se le indica el nombre de la tabla y a cual base de datos pertenece. Las anotaciones requeridas son:   @Entity del paquete (javax.ENTIDAD I   Es una clase con anotaciones que representa a una tabla de una Base de Datos.  La entidad debe tener un método get/set para cada atributo. .persistence. Con está anotación se le indica al motor de persistencia que la clase es una Entidad.Table).Entity).

generado por el IDE Jboss Developer Studio.  Cualquier subclase de una clase serializable también lo es.ENTIDAD II La entidad debe implementar la interfaz Serializable del paquete (java.  Todos los atributos de la entidad deben ser tipo Objeto o Tipo entidad.  La interfaz no tiene métodos solo sirve para identificar de que es serializable.  . solo para el atributo llave de la entidad.  La entidad debe sobre escribir los métodos hashCode() y equals(Object obj) de la clase Object.io) útil para la persistencia de objetos.  La entidad serializable debe llevar el siguiente atributo.

GenerationType). @Column (name= “nombre_del_campo") del paquete (javax.GeneratedValue y javax. . Con está anotación se le indica el nombre de la columna de la tabla. @GeneratedValue(strategy = GenerationType.Id).persistence.Column).AUTO) del paquete (javax.persistence.ANOTACIONES BÁSICAS    @Id del paquete (javax. Con está anotación se identifica el atributo que contiene la persistent identity de la entidad(la llave primaria). Con está anotación se le indica que el campo llave es autoincremental realizado por el motor de base de datos.persistence.persistence.

Con está anotación el valor del atributo no debe ser null.validator.VALIDACIONES   @NotNull del paquete (org.  .NotNull). Con esta anotación la longitud de un atributo debe estar en el rango.Range).  @Range del paquete (org.Email).validator.hibernate.Length). Con está anotación la cadena del atributo representa un patrón email.validator. @Email del paquete (org.hibernate.hibernate. @Length del paquete (org. Con está anotación el valor del atributo numérico debe estar en el rango.hibernate.validator.

EAGER) del paquete (javax. referencedColumnName=“ nombre_del_campo") del paquete (javax.LAZY) ó @ManyToOne(fetch=FetchType. @JoinColumn(name=“nombre_del_campo".persistence.persistence.  .ManyToOne).JoinColumn).RELACIONES ENTRE ENTIDADES I  @ManyToOne(fetch=FetchType.

RELACIONES ENTRE ENTIDADES II  @OneToMany(mappedBy = "atributo_maestro".OneToMany).persistence. . fetch = FetchType.LAZY) del paquete (javax.

inverseJoinColumns = { @JoinColumn(name="nombre_del_campo". referencedColumnName="nombre_del_campo")}) .ManyToMany). @JoinTable(name = "tabla_intermedia".LAZY) del paquete (javax.RELACIONES ENTRE ENTIDADES III   @ManyToMany(fetch=FetchType. joinColumns = @JoinColumn(name="nombre_del_campo".referencedColumnName="nombre_del_campo").persistence.

RELACIONES ENTRE ENTIDADES IV .

.persistence.LAZY) del paquete (javax.RELACIONES ENTRE ENTIDADES V  @OneToOne(fetch=FetchType.ManyToMany).

persistence. .LAZY) del paquete (javax.ManyToMany).RELACIONES ENTRE ENTIDADES VI  @OneToOne(fetch=FetchType.

ENTIDADES CON LLAVES COMPUESTAS I .

ENTIDADES CON LLAVES COMPUESTAS II .

ENTIDADES CON LLAVES COMPUESTAS III .

OTRAS ANOTACIONES I  @Transient del paquete (javax. Con está anotación se le indica al atributo que el contenido de un campo básico será guardado como LOB (Large OBject).persistence. Si es de otro tipo será mapeado a una columna de tipo BLOB (Binary Large OBject). . Con está anotación el atributo no es persistente.persistence.Lob). (No hace referencia a ninguna columna de la tabla).Transient).  @Lob del paquete (javax. Si por ejemplo utilizamos esta anotación para marcar un campo que contenta un String o caracteres el framework lo mapeará a una columna CLOB (Character Large OBject).

Date y java. @Min del paquete (org. @Size del paquete (org.  @Max del paquete (org.Max).validator.OTRAS ANOTACIONES II  @Temporal(TemporalType.DATE) y @Temporal(TemporalType. Con está anotación se indica el orden en que deben ser obtenidos los detalles para un atributo lista. Con está anotación el valor del atributivo numérico debe ser >= que el máximo indicado.TIME) del paquete (javax.Min). Con está anotación se indica que se debe persistir solos tipos de datos java.util.validator.hibernate.Temporal) y (javax. Por defecto el orden será ascendente (ASC) (de menor a mayor si el campo es numérico y por orden alfabético si el campo es de tipo texto).TemporalType).hibernate.    .persistence.Calendar.Size).hibernate.persistence.validator. Con está anotación el valor del atributo numérico debe ser <= que el máximo indicado. @OrderBy(“nombre asc").util. Con está anotación el tamaño de un atributo array ó collection debe estar dentro del rango.

por defecto en de la entidad si no se especifica. uniqueConstraints: constraints entre tablas relacionadas con la anotación @column y @joincolumn. @Table: indica la tabla principal relacionada con la entidad:     name: nombre de la tabla. catalog: nombre del catalogo.RESUMEN  Anotaciones Nivel Entidades:   @Entity: indica que la clase (POJO) es una entidad persistente. .  Anotaciones Nivel de Atributo:  @Id: indica el atributo que es llave primaria de la entidad. schema: nombre del esquema.

GenerationType.AUTO: valor por defecto. indica que éste se debe generar por ejemplo con una secuencia de la base de datos:  strategy: estrategia a seguir para la generación de la clave:     GenerationType.SEQUENCE: utiliza una secuencia (ORACLE.  generator: .TABLE. IDENTITY: utiliza un contador (MySQL). el contenedor decide la estrategia en funcion de la base de datos.RESUMEN  @GeneratedValue: asociado con la llave primaria. GenerationType. PostgreSQL) . Se debe especificar en la anotación @GeneratedValue con strategy = GenerationType.TABLE: utiliza una tabla de identificadores:  forma en la que se genera la clave. GenerationType. @TableGenerator: define una tabla con claves primarias generadas.

.     pkColumnValue: valor de la clave primaria. schema: esquema de la tabla. Se debe especificar la secuencia en la entidad junto a la clave primaria.  @SequenceGenerator: define un generador de claves primarias utilizando junto con la anotación @GeneratedValue. valueColumnName: nombre de la columna que guarda el último valor generado. uniqueConstraints: constrains entre tablas relacionadas. catalog: catalogo de la tabla. allocationSize: cantidad a incrementar de la secuencia.RESUMEN       name: nombre de la secuencia. table: nombre de la tabla que guarda los valores generados. pkColumnName: nombre de la clave primaria de la tabla. initialValue: valor inicial de la secuencia.

initialValue: valor inicial de la secuencia. allocationSize: cantidad a incrementar de la secuencia cuando llegue al máximo.   . sequenceName: nombre de la secuencia de la base de datos del que se va a obtener la clave.RESUMEN   name: nombre del generador de la clave.