Java Expert....Java/Open Source Addict

Redes Sociales

twitterlinkedinrss feedemail youtube

Mostrando entradas con la etiqueta jpa. Mostrar todas las entradas
Mostrando entradas con la etiqueta jpa. Mostrar todas las entradas

viernes, 19 de octubre de 2018

Configuración EclipseLink en WildFly


Estimad@s amig@s,

En el caso de que se requiera trabajar con la capa de persistencia EclipseLink en el servidor de aplicación WildFly (que viene configurado por defecto con Hibernate) se necesita realizar los siguientes pasos:

1.- Descargarse la capa de persistencia eclipselink 2.7, proceder a descomprimirle.

 

Nota: No utilizar la versión 3.0 o superior tiene un bug para encontrar la clase que representa el proveedor de persistencia.

2.- Proceder a copiar el archivo eclipselink.jar ubicado en el directorio jlib del archivo descargado al directorio <WILDFLY_DIR>/modules/system/layers/base/org/eclipse/persistence/main

 


 

3.- Proceder a editar el archivo module.xml referenciando al nombre de la librería (jar descargado) y excluyendo las clases del path javax que vienen precargadas en el servidor como se muestra a continuación.



 4. Finalmente reiniciar el servidor y estaremos listos para trabajar en nuestro servidor de aplicación con la capa de persistencia eclipselink.

Nota: En el caso de estén utilizando una versión anterior a WildFly 10. se deberá incluir la propiedad eclipselink.archive.factory  para poder ubicar las clases de JPA, en el archivo standalone.xml luego de extensions  como se muestra a continuación.

jueves, 18 de febrero de 2016

Composite id with FK – JPA


Muchas veces se necesite crear una clave primaria utilizando más de una columna ya sea que ésta este formado por dos columnas simples o que una de ellas represente un FK de otra tabla. Para representar esto en JPA utilizaremos el siguiente ejemplo relacional.

En este caso la tabla Mat_Tarea tiene dos PK y una de ellas es FK de la tabla Mat_Proyecto; para realizar el respectivo mapeo en JPA se debe realizar lo siguiente:
  • Crear los EntityBean para cada tabla

  • Proyecto [code] package com.matoosfe.modelo.entitybeans; import java.io.Serializable; import javax.persistence.*; import java.util.Date; import java.util.Set; /** * The persistent class for the Mat_Proyecto database table. * */ @Entity @Table(name="Mat_Proyecto") public class Proyecto implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int idProy; private String desProy; @Temporal( TemporalType.TIMESTAMP) private Date fecFinProy; @Temporal( TemporalType.TIMESTAMP) private Date fecIniProy; private String nomProy; //bi-directional many-to-one association to Tarea @OneToMany(mappedBy="matProyecto") private Set<Tarea> matTareas; public Proyecto() { } public int getIdProy() { return this.idProy; } public void setIdProy(int idProy) { this.idProy = idProy; } public String getDesProy() { return this.desProy; } public void setDesProy(String desProy) { this.desProy = desProy; } public Date getFecFinProy() { return this.fecFinProy; } public void setFecFinProy(Date fecFinProy) { this.fecFinProy = fecFinProy; } public Date getFecIniProy() { return this.fecIniProy; } public void setFecIniProy(Date fecIniProy) { this.fecIniProy = fecIniProy; } public String getNomProy() { return this.nomProy; } public void setNomProy(String nomProy) { this.nomProy = nomProy; } public Set<Tarea> getMatTareas() { return this.matTareas; } public void setMatTareas(Set<Tarea> matTareas) { this.matTareas = matTareas; } } [/code] Tarea [code] package com.matoosfe.modelo.entitybeans; import java.io.Serializable; import javax.persistence.*; import java.util.Date; import java.util.Set; /** * The persistent class for the Mat_Tarea database table. * */ @Entity @Table(name="Mat_Tarea") public class Tarea implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId private TareaPK id; @Temporal( TemporalType.TIMESTAMP) private Date fechaFinTar; @Temporal( TemporalType.TIMESTAMP) private Date fechaIniTar; private String nomTarea; //bi-directional many-to-one association to Proyecto @ManyToOne @JoinColumn(name="idProy", insertable=false, updatable=false) private Proyecto matProyecto; public Tarea() { } public TareaPK getId() { return this.id; } public void setId(TareaPK id) { this.id = id; } public Date getFechaFinTar() { return this.fechaFinTar; } public void setFechaFinTar(Date fechaFinTar) { this.fechaFinTar = fechaFinTar; } public Date getFechaIniTar() { return this.fechaIniTar; } public void setFechaIniTar(Date fechaIniTar) { this.fechaIniTar = fechaIniTar; } public String getNomTarea() { return this.nomTarea; } public void setNomTarea(String nomTarea) { this.nomTarea = nomTarea; } public Proyecto getMatProyecto() { return this.matProyecto; } public void setMatProyecto(Proyecto matProyecto) { this.matProyecto = matProyecto; } } [/code]
  • Cuando se tiene más de una columna como PK se debe crear una clase por tabla donde se asocia todos los atributos que representan la PK y relacionarlo con la clase padre. En este caso se creará una clase llamada TareaPK como se muestra a continuación.
  • [code] package com.matoosfe.modelo.entitybeans; import java.io.Serializable; import javax.persistence.*; /** * The primary key class for the Mat_Tarea database table. * */ @Embeddable public class TareaPK implements Serializable { //default serial version id, required for serializable classes. private static final long serialVersionUID = 1L; private int idTarea; private int idProy; public TareaPK() { } public int getIdTarea() { return this.idTarea; } public void setIdTarea(int idTarea) { this.idTarea = idTarea; } public int getIdProy() { return this.idProy; } public void setIdProy(int idProy) { this.idProy = idProy; } public boolean equals(Object other) { if (this == other) { return true; } if (!(other instanceof TareaPK)) { return false; } TareaPK castOther = (TareaPK)other; return (this.idTarea == castOther.idTarea) && (this.idProy == castOther.idProy); } public int hashCode() { final int prime = 31; int hash = 17; hash = hash * prime + this.idTarea; hash = hash * prime + this.idProy; return hash; } } [/code]
  • Como último paso se tiene que aumentar los atributos insertable=false y updatable=false en el mapeo de la relación existente en el POJO Tarea con Proyecto para realizar la dependencia.
  • [code] package com.matoosfe.modelo.entitybeans; import java.io.Serializable; import javax.persistence.*; import java.util.Date; import java.util.Set; /** * The persistent class for the Mat_Tarea database table. * */ @Entity @Table(name="Mat_Tarea") public class Tarea implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId private TareaPK id; @Temporal( TemporalType.TIMESTAMP) private Date fechaFinTar; @Temporal( TemporalType.TIMESTAMP) private Date fechaIniTar; private String nomTarea; //bi-directional many-to-one association to Proyecto @ManyToOne @JoinColumn(name="idProy", insertable=false, updatable=false) private Proyecto matProyecto; ....... } [/code]
Saludos

miércoles, 5 de agosto de 2015

Formas de Persistencia


Estimados amig@s les comporto un extracto del libro que JPA que estoy realizando como parte de mi preparación para la certificación OCEJPA Espero sus comentarios.

 1.2 Formas de Persistencia.

La persistencia involucra el almacenamiento permanente de la información sobre un medio físico o lógico asociándolo generalmente con una base de datos. En Java existen varias maneras de persistir un objeto entre las cuales se tiene las siguientes:

  • Persistir un objeto a través del mecanismo de Serialización(proceso para convertir un objeto en una secuencia de bits) sobre un disco duro o a través de una conexión de red; permite obtener un formato independiente que puede ser re-usado en medio de diferentes sistemas operativos. Java provee un mecanismo estandarizado, simple y transparente para serializar objetos a través de la implementación de la interface java.io.Serializable. Sin embargo este mecanismo a pesar de ser muy simple no cuenta con un lenguaje de consulta o una infraestructura que soporte acceso concurrente a la información o clusterización.
  • Otro mecanismo de persistencia es a través de JDBC (Java Database Connectivity), cual es el API estándar para gestionar base de datos relacionales. Permitiendo conectar la base de datos, ejecutar sentencias SQL tanto DML como DDL y obtener los resultados.
  • A pesar de que JDBC es usado ampliamente ha sido desplazada por la utilización de los ORM(Object Relational Mapping) o capas de persistencia, cuya funcionalidad es permitir la representación de un modelo de datos en un modelo de objetos y facilitar las operaciones fundamentales de la base de datos a través de métodos; entre algunas de las capas de persistencia se tiene las siguientes Hibernate, EclipseLink, ToplLink siendo consideradas como otro mecanismo persistencia.
  • Finalmente el esquema de persistencia estándar utilizada independientemente de la capa de persistencia se conoce con el nombre de Java Persistence API(JPA), y es el cual es utilizado para persistir los datos tanto en aplicaciones JEE como aplicaciones de escritorio.