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

Relación Muchos a Muchos en Hibernate 3.2

Tags: , ,

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.

Ejemplo Sencillo de RichFaces con JSF

Tags: , , ,

Richfaces es un framework para Java con el cual puedes crear un ambiente AJAX de manera facil, rapida y limpia, a continuación presentare un ejemplo sencillo, donde podras ver el poder de este framework.

Primero, necesitamos el JavaBean, como el siguiente, como puedes ver tenemos una operacion con un ActionEvent, esta servirá para comunicarse con el Boton Submit del Formulario y escuchara sus llamados.

package events.richfaces;
 
import javax.faces.event.ActionEvent;
 
public class echoBean {
 
	private String name;
	private Integer count;
 
	public Integer getCount() {
		return count;
	}
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	public void countListener (ActionEvent event){
		count = name.length();
		}
 
}

Después tenemos que ponerlo en nuestro faces-config.xml, para tener acceso a el Bean desde las paginas web

  <managed-bean>
  <managed-bean-name>echoBean</managed-bean-name>
  <managed-bean-class>events.richfaces.echoBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>

Una vez lista la logica, vamos con la capa de presentación, vamos a explicar brevemente la función de algunas etiquetas:

  • a4j:support : Este componente activa la funcionalidad AJAX para tu pagina en cualquier componente JSF, se agrega como un hijo del componente y se configura segun convenga.
  • actionListener=”#{echoBean.countListener}”: Se puede poner dentro del a4j, y al ejecutar el evento, a su vez, ejecuta la operación del bean.
  • reRender=”echo, count”: Sin estas etiquetas no se mostraria los datos actualizados despues de la petición ajax, y hace que las etiquetas con los ID listados, se actualicen, esas etiquetas deben estar ligadas con el GET del bean.
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<h:form>
	<rich:panel>
		<h:panelGrid columns="2">
			<h:outputText value="Nombre" />
			<h:inputText value="#{echoBean.name}" />
			<h:outputText  value="echo:" />
			<h:outputText id="echo" value="#{echoBean.name}" />
			<h:outputText value="Count" />
			<h:outputText  id="count" value="#{echoBean.count}" />
 
		</h:panelGrid>
		<!--<h:commandButton actionListener="#{echoBean.countListener}" value="Submit" />-->
		<a4j:commandButton actionListener="#{echoBean.countListener}" value="Submit" reRender="echo,count" />
	</rich:panel>
	</h:form>

© 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.