1. Ing. Elkin Suárez
Esp. Gerencia de Proyectos
Candidato MBA
edsuarez@uis.edu.co
JAVA PERSISTENCE
API
INGENIERIA WEB
2. ¿ 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.
3. ENTIDAD I
Es una clase con anotaciones que representa a una
tabla de una Base de Datos.
Las anotaciones requeridas son:
@Entity del paquete (javax.persistence.Entity). Con está
anotación se le indica al motor de persistencia que la clase
es una Entidad.
@Table(name =“nombre_base_datos:nombre_tabla") del
paquete (javax.persistence.Table). Con está anotación se le
indica el nombre de la tabla y a cual base de datos
pertenece.
La entidad debe tener un método get/set para cada atributo.
4. ENTIDAD II
La entidad debe implementar la interfaz Serializable
del paquete (java.io) útil para la persistencia de
objetos.
La interfaz no tiene métodos solo sirve para identificar
de que es serializable.
Cualquier subclase de una clase serializable también
lo es.
La entidad serializable debe llevar el siguiente atributo,
generado por el IDE Jboss Developer Studio.
Todos los atributos de la entidad deben ser tipo Objeto
o Tipo entidad.
La entidad debe sobre escribir los métodos
hashCode() y equals(Object obj) de la clase Object,
solo para el atributo llave de la entidad.
5. ANOTACIONES BÁSICAS
@Id del paquete (javax.persistence.Id). Con está
anotación se identifica el atributo que contiene la
persistent identity de la entidad(la llave primaria).
@GeneratedValue(strategy = GenerationType.AUTO) del
paquete (javax.persistence.GeneratedValue y
javax.persistence.GenerationType). Con está anotación
se le indica que el campo llave es autoincremental
realizado por el motor de base de datos.
@Column (name= “nombre_del_campo") del paquete
(javax.persistence.Column). Con está anotación se le
indica el nombre de la columna de la tabla.
6. VALIDACIONES
@NotNull del paquete (org.hibernate.validator.NotNull). Con
está anotación el valor del atributo no debe ser null.
@Length del paquete (org.hibernate.validator.Length). Con
esta anotación la longitud de un atributo debe estar en el
rango.
@Range del paquete (org.hibernate.validator.Range). Con está
anotación el valor del atributo numérico debe estar en el rango.
@Email del paquete (org.hibernate.validator.Email). Con está
anotación la cadena del atributo representa un patrón email.
7. RELACIONES ENTRE ENTIDADES I
@ManyToOne(fetch=FetchType.LAZY) ó @ManyToOne(fetch=FetchType.EAGER) del
paquete (javax.persistence.ManyToOne).
@JoinColumn(name=“nombre_del_campo", referencedColumnName=“
nombre_del_campo") del paquete (javax.persistence.JoinColumn).
8. RELACIONES ENTRE ENTIDADES II
@OneToMany(mappedBy = "atributo_maestro", fetch =
FetchType.LAZY) del paquete (javax.persistence.OneToMany).
9. RELACIONES ENTRE ENTIDADES III
@ManyToMany(fetch=FetchType.LAZY) del paquete (javax.persistence.ManyToMany).
@JoinTable(name = "tabla_intermedia", joinColumns =
@JoinColumn(name="nombre_del_campo",referencedColumnName="nombre_del_campo"),
inverseJoinColumns = { @JoinColumn(name="nombre_del_campo",
referencedColumnName="nombre_del_campo")})
16. OTRAS ANOTACIONES I
@Transient del paquete (javax.persistence.Transient). Con está anotación el atributo
no es persistente. (No hace referencia a ninguna columna de la tabla).
@Lob del paquete (javax.persistence.Lob). Con está anotación se le indica al
atributo que el contenido de un campo básico será guardado como LOB (Large
OBject). 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). Si es de otro tipo será mapeado a una columna de tipo
BLOB (Binary Large OBject).
17. OTRAS ANOTACIONES II
@Temporal(TemporalType.DATE) y @Temporal(TemporalType.TIME) del paquete
(javax.persistence.Temporal) y (javax.persistence.TemporalType). Con está anotación se indica
que se debe persistir solos tipos de datos java.util.Date y java.util.Calendar.
@Max del paquete (org.hibernate.validator.Max). Con está anotación el valor del atributo
numérico debe ser <= que el máximo indicado.
@Min del paquete (org.hibernate.validator.Min). Con está anotación el valor del atributivo
numérico debe ser >= que el máximo indicado.
@Size del paquete (org.hibernate.validator.Size). Con está anotación el tamaño de un atributo
array ó collection debe estar dentro del rango.
@OrderBy(“nombre asc"). Con está anotación se indica el orden en que deben ser obtenidos
los detalles para un atributo lista. 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).