Archive

Archive for the ‘Howto’ Category

Relación Muchos a Muchos en Hibernate 3.2

Octubre 4th, 2008

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: ejemplo, Hibernate, Java

Howto , ,

Cómo se hace una Televisión de Plasma

Septiembre 15th, 2008

Un poco de cristal, 2 japoneses, gases líquidos, un poco de ingenio y listo, un televisor de plasma. Un video de Discovery Chanel, interesante.

Tags: neón, plasma, Television, xenón

Howto, Youtube , , ,