• Autor: admin
  • Publicado: Oct 4th, 2008
  • Categoria: Articulos
  • Comentarios: 1

Relación Muchos a Muchos en Hibernate 3.2

Quien ha trabajado con hibernate y ha tenido este problema, bueno, yo para empezar, asi que como logre hacerlo voy a publicar la solución, bien sencillo, despues de generar con Hibernate Tools los pojos, hbm.xml y los DAO, eso es sencillo, pondre dos clases de ejemplo.

En este ejemplo tendremos 3 tablas, Servicio, Variable y Servicio_Variable, que es la tabla que relaciona muchos servicios con muchas variables.

Clase Servicio

public class BmServicios implements java.io.Serializable {
	private int idServicio;
	private String nombre;
	private Set<bmVariable> bmVariables = new HashSet<bmVariable>(0);
 
	public BmServicios() {
	}
 
	public BmServicios(int idServicio,
			 String nombre) {
		this.idServicio = idServicio;
		this.nombre = nombre;
	}
 
	public BmServicios(int idServicio,Set<bmVariable> bmVariables,
		 {
		this.idServicio = idServicio;
 
		this.nombre = nombre;
 
	}
 
	public int getIdServicio() {
		return this.idServicio;
	}
 
	public void setIdServicio(int idServicio) {
		this.idServicio = idServicio;
	}
 
	public String getNombre() {
		return this.nombre;
	}
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
	public Set<bmVariable> getBmVariables() {
		return this.bmVariables;
	}
 
	public void setBmVariables(Set<bmVariable> bmVariables) {
		this.bmVariables = bmVariables;
	}
 
 
}

Clase Variable

public class BmVariable implements java.io.Serializable {
 
	private int idVariable;
	private String nombre;
	private String descripcion;
	private String tipoDeDato;
	private Set<bmServicios> bmServicioses = new HashSet<bmServicios>(0);
 
	public BmVariable() {
	}
 
	public BmVariable(int idVariable) {
		this.idVariable = idVariable;
	}
 
	public BmVariable(int idVariable,  String nombre,
			String descripcion, String tipoDeDato,
			Set<bmServicios> bmServicioses) {
		this.idVariable = idVariable;
		this.nombre = nombre;
		this.descripcion = descripcion;
		this.tipoDeDato = tipoDeDato;
		this.bmServicioses = bmServicioses;
	}
 
	public int getIdVariable() {
		return this.idVariable;
	}
 
	public void setIdVariable(int idVariable) {
		this.idVariable = idVariable;
	}
 
	public String getNombre() {
		return this.nombre;
	}
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
	public String getDescripcion() {
		return this.descripcion;
	}
 
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
 
	public String getTipoDeDato() {
		return this.tipoDeDato;
	}
 
	public void setTipoDeDato(String tipoDeDato) {
		this.tipoDeDato = tipoDeDato;
	}
 
	public Set<bmServicios> getBmServicioses() {
		return this.bmServicioses;
	}
 
	public void setBmServicioses(Set<bmServicios> bmServicioses) {
		this.bmServicioses = bmServicioses;
	}
 
}

Ahora, como hago para guardar unr registro en Servicio_Variable, si el Hibernate Tools no me genera un pojo para esa tabla (ojo, no la genera porque no tiene mas que los ID (PK) de las tablas Servicio y Variable.

Esta es la solución

//Buscamos registros de ejemplo en Servicio
BmServicio servicio= (BmServicio ) session.get(BmServicio .class, new Integer(2));
//Buscamos registros de ejemplo en Variable
BmVariable variable= (BmVariable ) session.get(BmVariable .class, new Integer(2));
 
//Creamos una variable Set Generica en base al Pojo Servicio
	Set<bmServicio> setServicio = new HashSet<bmServicio>();
//Igual para Variable
		Set<bmVariable> setVariable = new HashSet<bmVariable>();
		setVariable .add(variable);
		setServicio .add(servicio);
		BmVariable .setBmServicio(setServicio);
		//Luego hacemos un session.save(), eso es lo que hacen estas funciones respectivamente para cada tabla.
                crearVariable(variable);
		crearSerivicio(servicio);
 
//Pueden crear un crearRegistro mas generico, para reutilizar codigo, (Gracias Comando 83)
public static void crearRegistro(Object tabla)
	{
		Transaction tx = null;
		Session session = HibernateUtil.getSession();
		try {
			tx = session.beginTransaction();
			session.save(tabla);
			//JOptionPane.showConfirmDialog(null, "codigo: "+((Sistema)tabla).getCodigo());
			tx.commit();
		} catch (HibernateException e) {
			e.printStackTrace();
			if (tx != null && tx.isActive())
				tx.rollback();
		}
	}

Y listo, se guarda el registro en Variable_Sesion.

Tags: , ,

One Response to “Relación Muchos a Muchos en Hibernate 3.2”


  1. cimarron
    on Nov 12th, 2008
    @ 16:43

    Esta muy bueno el ejemplo muchas gracias, pero me gustaria saber como le hago cuando quiero adicionar mas valores a la tabla Servicio_variable, por ejemplo si quisiera adicionar un valor fecha u otro.

    Muchas gracias

Dejar una Respuesta

Spam Protection by WP-SpamFree

© 2009 Jotadeveloper Blog. Nuestros contenidos están bajo licencia Creative Commons mientras no se indique lo contrario,
y pueden reproducirse libremente sin más que mencionar la fuente ("JotaDeveloper") y la URL concreta del artículo original. .

This blog is powered by Wordpress and JotaDeveloperTheme.