Está en la página 1de 11

Centro de Comercio y Servicios

Regional Cauca

GUIA #2. JPA


(Java Persistence API)

1. Creando un proyecto Java con JPA


Vamos a realizar la gestión a una base de datos (de postgresql) que contiene una sola tabla como se muestra a
continuación:

Las herramientas que se utilizarán para el desarrollo son:


- Entorno de desarrollo: Netbeans 7.3
- Servidor de Aplicaciones: Glassfish 3.1.2
- Herramientas y frameworks: JPA, EJB, JSF (PrimeFaces)

2. Creación de Proyecto Web


- En nuestro entorno de desarrollo creamos un nuevo proyecto web.

- El nombre de proyecto en nuestro caso será “Persona”, y se elige el espacio de trabajo en donde se guardará
el proyecto. Adicionalmente vamos a decir que no se cree la clase principal, y damos click en finalizar:

Oscar Viveros Egas. ohviveros@misena.edu.co


Centro de Comercio y Servicios
Regional Cauca

- Una vez el proyecto se haya creado se debe visualizar de la siguiente manera:

3. Conexión con la Base de Datos y Clases de Entidad


- Lo primero que se debe crear son las clases de entidad.
o Dentro del proyecto, hacemos click derecho y elegimos la opción new/Entity Classes From DataBases

Si la opción no aparece directamente en la lista, la encontramos en “other” y la categoría “persistence”.

o Ahora, dentro de la lista despegable de “DataSource” elegimos la opción “new datasource”

o Dentro de la ventana que se despliega escribimos el nombre “ds_persona” y elegimos crear una
nueva conexión a base de datos

 De la ventana elegimos primero el driver del motor de base de datos con el que estamos
trabajando, en nuestro caso PostgreSQL y damos click en siguiente. Para los diferentes
motores de bases de datos los pasos que se narran a continuación son similares.

Oscar Viveros Egas. ohviveros@misena.edu.co


Centro de Comercio y Servicios
Regional Cauca

 Llenamos los datos que se piden de acuerdo a la ubicación del servidor, el nombre de la base
de datos y el usuario y contraseña del motor que estemos usando. Probamos la conexión.

 En caso que la conexión se haga de forma satisfactoria podemos continuar eligiendo el


esquema en que trabaja la base de datos. Elegimos siguiente y en la última ventana dejamos
la opción por defecto y damos click en finalizar:

o Al finalizar el paso anterior se retorna a la ventana de Data Source con la conexión ya realizada.
Damos Click en OK.

o Con lo anterior, retornamos a la ventana de creación de las clases de entidad. Donde ahora podemos
ver que se listan las tablas que existen en la base de datos y las cuales puedo mapear (crear clases
Oscar Viveros Egas. ohviveros@misena.edu.co
Centro de Comercio y Servicios
Regional Cauca

que las representen). Agregamos las tablas al lado derecho con el botón (Add All >>) y damos click
en siguiente.

o El paquete en el que se crearán las entidades corresponde al acceso a datos, y especificamos que se
cree la unidad de persistencia como aparece en la imagen. Damos click en siguiente.

o De la última ventana elegimos las opciones como se especifica en la figura. Entre las primeras
opciones se puede elegir “Eager” o “Lazy”, donde la primera significa que en una consulta se
obtendría la información de la tabla consultada y de aquellas que están relacionadas a esta, y el caso
contrario es que solo se obtiene la información de la tabla solicitada. En el segundo menú
despegable elegimos trabajar con Listas. El resto de las opciones las dejamos como aparecen por
defecto. Damos click en finalizar.

- Cuando se tiene una base de datos con más de una tabla y existe algún tipo de relación entre estas, es
recomendable que se borren las líneas de código que tienen relación uno a muchos en cada una de las
clases de entidad en las que aparezcan, dichas líneas se muestra a continuación:

Oscar Viveros Egas. ohviveros@misena.edu.co


Centro de Comercio y Servicios
Regional Cauca

- Adicionalmente, en este proceso se ha creado el archivo “persistence.xml”, el cual contienen los parámetros
que nos permiten conectar a la base de datos. El nombre del archivo persistence.xml por defecto será el
mismo nombre del proyecto seguido de las letras PU, por ejemplo:

o Nombre del proyecto: Persona


o Nombre de la Unidad de persistencia: PersonaPU

Este nombre será usado en el siguiente punto.

4. Clases JPA Controllers – Control del Negocio

Una vez se han creado las entidades, que corresponden a la primera capa de nuestra aplicación (accesoDatos o
modelo), debemos continuar con la segunda capa (negocio o controlador). En esta capa se crean las clases que
permiten realizar el CRUD sobre la base de datos, estas clases se llaman JpaController.

- Para esto, sobre el proyecto damos click dercho y elegimos la opción new/JPA Controller from Entity Classes.
En caso en que no se encuentre en la lista, debemos elegir la opción “other” y la categoría “persistence”.

- A continuación nos aparecerá una ventana con todas las entidades a las que se pueden crear sus respectivos
JpaControllers. Para esto, pasamos todas las entidades al lado derecho con “Add All >>” y damos click en
siguiente. Ahora, elegimos el nombre del paquete (negocio o control) y damos click en finalizar.

Si la creación de estos controladores se hizo de forma correcta nos deben haber aparecido en nuestro
proyecto dos paquetes, uno con 3 clases que controlan Excepciones y otro con los controladores de cada
entidad que hayamos definido, como se muestra a continuación:

Oscar Viveros Egas. ohviveros@misena.edu.co


Centro de Comercio y Servicios
Regional Cauca

- Las clases JpaControllers contienen los métodos que nos permiten hacer un CRUD. Para poder entender
mejor estos métodos, vamos a borrar las líneas de código desde el método “créate” hasta el final de la clase,
de tal forma que la clase quede así:

- Lo primero que vamos a hacer con esta clase, al igual que a todos los JpaControllers es crearles un
constructor (click derecho dentro de la clase/insertar código/ constructor) y dentro de ellos agregar una
línea de código como se muestra:

De esta línea es importante tener en cuenta lo siguiente:


o La clase Persistence debe importar el paquete javax.persistence.Persistence;
o El nombre de lo que se escribe entre comillas corresponde al nombre de la Unidad de Persistencia
creada en el numeral 3.

La explicación de las líneas anteriores es la siguiente:

Para poder administrar las entidades requerimos un administrador (EntityManager), pero este se obtiene a
partir de una fábrica de administradores (EntityManagerFactory), y finalmente la fábrica debe corresponder

Oscar Viveros Egas. ohviveros@misena.edu.co


Centro de Comercio y Servicios
Regional Cauca

con la base de datos que queremos gestionar, por lo cual usamos la Unidad de Persistencia que se creó en el
paso 3 (PersonaPU).

- A partir de ahora creamos los métodos que nos permiten hacer un CRUD. Los métodos para agregar,
actualizar y eliminar son como se muestra a continuación:

o Guardar

o Actualizar

o Eliminar

La explicación de las líneas anteriores es la siguiente:

Primero creamos el administrador de entidades para la gestión (EntityManager), luego iniciamos una
transacción. Con la transacción abierta escribimos la orden que queremos efectuar (guardar, actualizar o
eliminar), después de esto debemos confirmar la transacción y finalmente cerramos el administrador de
entidades.

Como se puede ver en el código anterior, los métodos contienen prácticamente las mismas líneas de código.
Las diferencias están en:

 Guardar  persist
 Actualizar  merge
 Eliminar  remove

Adicionalmente, para eliminar el objeto se debe actualizar antes (como se muestra en el código). Lo anterior
se explica teniendo en cuenta los estados que tienen las entidades, como se indica:

Oscar Viveros Egas. ohviveros@misena.edu.co


Centro de Comercio y Servicios
Regional Cauca

Si observamos la imagen, para poder eliminar una entidad esta debe estar en estado “managed”. Una
entidad, antes de ser eliminada se encuentra en estado “detached”, y como se indica, para poder pasar de
detached a managed debo primero actualizar (merge) y luego ya podemos eliminar (remove)

- Ya con esto nos queda faltando los métodos para la búsqueda. Para esto, vamos a explicar dos formas de
búsqueda: la primera cuando se busca por la llave primaria de la tabla (PK) y la segunda para el resto de
búsquedas que se requieran hacer:
o Búsqueda por PK:

En este código, se debe tener en cuenta que los parámetros del método find corresponden a la clase que
debemos retornar (en nuestro caso Persona) y al valor del id por el que vamos a buscar (corresponde al
PK de la tabla. No funciona con datos que no sean PK)

o Otras búsquedas: En este caso podemos tener búsquedas que retornen una sola persona (por
ejemplo si se buscar una persona por cédula) o puede retornar varias personas (por ejemplo si se
busca por nombre).

En este código se buscan todas las personas que existen en la base de datos. Debemos tener en cuenta que en la
variable jpql se debe escribir la consulta en lenguaje JPQL que queremos ejecutar, y estos métodos pueden contener
diferentes parámetros para la consulta.

5. Vista
Para probar lo realizado en los numerales anteriores, es necesario crear una clase principal java la cual contenga el
código necesario para llamar a los métodos contenidos en la clase controladora. Para esto hacemos lo siguiente:

Oscar Viveros Egas. ohviveros@misena.edu.co


Centro de Comercio y Servicios
Regional Cauca

- La clase se llamará Principal y estará en el paquete vista

- Lo primero que vamos a hacer es crear el atributo que hace referencia al objeto que llamará los métodos
contenidos en el controlador (lo llamaremos pjc)

- Con la clase JOPtionPane creamos el menú de nuestra aplicación:

Oscar Viveros Egas. ohviveros@misena.edu.co


Centro de Comercio y Servicios
Regional Cauca

- En cada uno de los casos vamos a crear métodos que contengan el código para llamar los métodos CRUD
que se encuentran en el controlador:

o Guardar: se solicita los datos de la nueva persona a guardar, crear el objeto asignándole dichos datos
y luego se guarda:

o Modificar: se solicita primero el id de la persona que se va a modificar (para verificar si existe), en


caso en que exista se solicitan los nuevos datos y se procede a modificar:

o Eliminar: se solicita primero el id de la persona que se va a eliminar (para verificar si existe), en caso
en que exista se elimina de la base de datos.

Oscar Viveros Egas. ohviveros@misena.edu.co


Centro de Comercio y Servicios
Regional Cauca

o Buscar: se deben mostrar todas las personas que se encuentran almacenadas en la base de datos:

- Finalmente, a nuestro proyecto debemos agregarle la librería (driver) de postgresql que nos permita
comunicar con nuestra base de datos, para esto damos click derecho en la carpeta Libraries de nuestro
proyecto y seleccionamos Add Library, de la lista que se despliega seleccionamos la que se muestra en la
imagen:

Ahora podemos probar nuestro proyecto y verificar en la base de datos que la aplicación hace lo que se espera.

¡¡¡GRACIAS!!!

Oscar Viveros Egas. ohviveros@misena.edu.co

También podría gustarte