sábado, 6 de noviembre de 2010

Creación de relación Varios a Varios.

Para este ejemplo vamos a utilizar mi post llamado Creacion de Unidad de Persistencia con MySQL en Netbeans.
Creamos un nuevo paquete llamado com.ejemplo.entidades.variosvarios. Dentro creamos una Entity Class llamada Pelicula, que tiene una variable miembro llamada título del tipo String y un Set de tipo Productor llamada productores, Este Set debe tener la anotación @ManyToMany(cascade=CascadeType.ALL),junto con sus repectivos getters and setters .Debe tener el siguiente código:

package com.ejemplo.entidades.variosvarios;

import java.io.Serializable;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Pelicula implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String titulo;
@ManyToMany(cascade=CascadeType.ALL)
private Set productores;

public Long getId() {
return id;
}

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

public String getTitulo() {
return titulo;
}

public void setTitulo(String titulo) {
this.titulo = titulo;
}

public Set getProductores() {
return productores;
}

public void setProductores(Set productores) {
this.productores = productores;
}


public Pelicula() {
}

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

@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Pelicula)) {
return false;
}
Pelicula other = (Pelicula) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}

@Override
public String toString() {
String cadena = "id:" + id + ";titulo:" + titulo;
for (Productor productor:productores) {
cadena += productor.toString();
}
return cadena;
}

}


Luego creamos una Entity Class llamada Productor, que tiene una variable miembro llamada nombre del tipo String y un Set de tipo Pelicula llamada películas, que debe tener un anotación ManyToMany, junto con sus repectivos getters and setters. Con que el código queda de la siguiente manera:

package com.ejemplo.entidades.variosvarios;

import java.io.Serializable;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;

@Entity
public class Productor implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nombre;
@ManyToMany(mappedBy = "productores",cascade=CascadeType.ALL)
private Set peliculas;

public Long getId() {
return id;
}

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

public String getNombre() {
return nombre;
}

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

public Set getPeliculas() {
return peliculas;
}

public void setPeliculas(Set peliculas) {
this.peliculas = peliculas;
}



public Productor() {
}

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

@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Productor)) {
return false;
}
Productor other = (Productor) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}

@Override
public String toString() {
String cadena = "id:" + id + ";nombre:" + nombre;
for (Pelicula pelicula : peliculas) {
cadena += pelicula.toString();
}
return cadena;
}
}

Hecho este código, vamos a crear la clase Utilitario dentro de com.ejemplo.sesion. Ahi hacemos una inyección del persistence Context y usamos un EntityManager para usar la entidad antes creada. Además creamos una funcion llamada relacionVariosVarios, que se encargará de insertar datos (No olvidemos que esta funcion tiene que estar tambien en la interface remota, podriamos usar Insert Code > Add Business Method en Netbeans).Es decir:


/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package com.ejemplo.session;

import com.ejemplo.entidades.variosvarios.Pelicula;
import com.ejemplo.entidades.variosvarios.Productor;
import java.util.HashSet;
import java.util.Set;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
*
* @author santiago
*/
@Stateless
public class Utilitario implements UtilitarioRemote {
@PersistenceContext EntityManager em;

public void relacionVariosVarios() {
Set peliculasJuan=new HashSet();
Set peliculasPedro=new HashSet();
Set peliculasDaniela=new HashSet();
Set peliculasArturo=new HashSet();

Set productoresTitanic=new HashSet();
Set productoresGladiador=new HashSet();
Set productoresTopGun=new HashSet();

Pelicula peliculaTitanic=new Pelicula();
peliculaTitanic.setId(1L);
peliculaTitanic.setTitulo("Titanic");
peliculaTitanic.setProductores(productoresTitanic);

Pelicula peliculaGladiador=new Pelicula();
peliculaGladiador.setId(2L);
peliculaGladiador.setTitulo("Gladiador");
peliculaGladiador.setProductores(productoresGladiador);

Pelicula peliculaTopGun=new Pelicula();
peliculaTopGun.setId(3L);
peliculaTopGun.setTitulo("TopGun");
peliculaTopGun.setProductores(productoresTopGun);

Productor productorJuan=new Productor();
productorJuan.setId(1L);
productorJuan.setNombre("Juan");
productorJuan.setPeliculas(peliculasJuan);

Productor productorPedro=new Productor();
productorPedro.setId(2L);
productorPedro.setNombre("Pedro");
productorPedro.setPeliculas(peliculasPedro);

Productor productorDaniela=new Productor();
productorDaniela.setId(3L);
productorDaniela.setNombre("Daniela");
productorDaniela.setPeliculas(peliculasDaniela);

Productor productorArturo=new Productor();
productorArturo.setId(4L);
productorArturo.setNombre("Arturo");
productorArturo.setPeliculas(peliculasArturo);

productoresTitanic.add(productorJuan);
productoresTitanic.add(productorPedro);
productoresTitanic.add(productorDaniela);

productoresGladiador.add(productorDaniela);
productoresGladiador.add(productorArturo);
productoresGladiador.add(productorPedro);

productoresTopGun.add(productorJuan);
productoresTopGun.add(productorArturo);
productoresTopGun.add(productorDaniela);


em.persist(peliculaTitanic);
em.persist(peliculaGladiador);
em.persist(peliculaTopGun);
}

}

Finalmente el método main del proyecto cliente quedará como:


No hay comentarios:

Publicar un comentario