sábado, 6 de noviembre de 2010

Creación de una relacion uno - uno unidireccional

Para este ejemplo vamos a utilizar mi post llamado Creacion de Unidad de Persistencia con MySQL en Netbeans.

Primero creamos un paquete llamado com.ejemplo.session, dentro de este paquete creamos un Session Bean del tipo Stateless con interface Remota llamado Utilitario, que lo usaremos para probar la entidad.


Luego creamos otro paquete llamado com.ejemplo.entidades.unouno.unidireccional, en el proyecto EJB
Dentro de ese paquete vamos a crear un Entity Class

Lo vamos a llamar DatosPersonales que tendrá una variable miembro llamada descripción del tipo String. Tambien creamos los respectivos getters y setters con lo cual el código nos queda de la siguiente manera:


package com.ejemplo.entidades.unouno.unidireccional;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class DatosPersonales implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String descripcion;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getDescripcion() {
return descripcion;
}

public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}



@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
if (!(object instanceof DatosPersonales)) {
return false;
}
DatosPersonales other = (DatosPersonales) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}

@Override
public String toString() {
return "com.ejemplo.entidades.unouno.unidireccional.DatosPersonales[id=" + id + "]";
}
}

Después de esto creamos otro Entity Class llamado Cliente y le agregamos una variable miembro llamada nombre del tipo String. Tambien agregamos otra variable miembro llamada datosPersonales del tipo DatosPersonales, y sobre la definición de la variable la anotación:@OneToOne(cascade=CascadeType.ALL), esto para indicar la relación unidireccional con DatosPersonales. Tambien creamos los getters y setters de las variable miembro.

Con lo cual el código nos queda de la siguiente manera:


package com.ejemplo.entidades.unouno.unidireccional;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Entity
public class Cliente implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nombre;
@OneToOne(cascade=CascadeType.ALL)
private DatosPersonales datosPersonales;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public DatosPersonales getDatosPersonales() {
return datosPersonales;
}

public void setDatosPersonales(DatosPersonales datosPersonales) {
this.datosPersonales = datosPersonales;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}



@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}

@Override
public boolean equals(Object object) {
if (!(object instanceof Cliente)) {
return false;
}
Cliente other = (Cliente) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}

@Override
public String toString() {
return "com.ejemplo.entidades.unouno.unidireccional.Cliente[id=" + id + "]";
}

}


Hecho este código, vamos a la clase Utilitario de com.ejemplo.sesion.

Ahí hacemos una inyección del persistence Context y usamos un EntityManager para usar la entidad antes creada. Además creamos una funcion llamada relacionUnoUnoUniDireccional, que se encargará de insertar datos en cliente(No olvidemos que esta funcion tiene que estar tambien en la interface remota, podriamos usar Insert Code > Add Business Method en Netbeans).


Este objeto debe recibir un objeto del tipo DatosPersonales que tambien debe ser creado. Es decir:

package com.ejemplo.session;

import com.ejemplo.entidades.unouno.unidireccional.Cliente;
import com.ejemplo.entidades.unouno.unidireccional.DatosPersonales;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class Utilitario implements UtilitarioRemote {
@PersistenceContext EntityManager em;
public void relacionUnoUnoUniDireccional() {
DatosPersonales datosPersonales=new DatosPersonales();
datosPersonales.setDescripcion("Ejemplo");
datosPersonales.setId(1L);
Cliente cliente=new Cliente();
cliente.setId(1L);
cliente.setNombre("Santiago");
cliente.setDatosPersonales(datosPersonales);
em.persist(cliente);
}
}



Luego desde el Main del proyecto cliente, hacemos una inyección de EJB a UtilitarioRemote y llamamos al metodo relacionUnoUnoUniDireccional.

package relaciones;

import com.ejemplo.session.UtilitarioRemote;
import javax.ejb.EJB;

public class Main {

@EJB private static UtilitarioRemote utilitario;
public static void main(String[] args) {
utilitario.relacionUnoUnoUniDireccional();
}
}


Si hacemos una consulta en MySQL veremos que se crearon las tablas Cliente y DatosPersonales.
En cliente se inserto un registro, que guarda referencia a DatosPersonales
En Datos Personales veremos que se inserto un registro, pero sin referencia a Cliente, debido a que es una relación unidireccional


No hay comentarios:

Publicar un comentario