Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/05/2008, 15:21
rls
 
Fecha de Ingreso: marzo-2008
Mensajes: 48
Antigüedad: 16 años, 1 mes
Puntos: 0
insertar datos en tablas con realcion muchos a muchos con hibernate

hola ya he mapeado toda mi base de datos que esta en postgresql, pero tengo un problimita a la hora de insertar datos en tablas que tienen relacion de muchos a muchos.
Las tablas que tengo son:

fin(idfin,descripcion)
indicadores(idind,descripcion)
finindicador(idfin,idind)

como pueden ver "fin" e "indicadores" son las tablas fuertes y "finindicador" es tabla que se crea debido a que las dos tablas antes mencionadas tienen una relacion de muchos a muchos.

El mapeo lo hice de la siguiente forma:

Archivo: Fin.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//hibernate/hibernate Mapping DTD 2.0//EN"
"webapps/mml/WEB-INF/src/hibernate-mapping-2.0.dtd">
<hibernate-mapping>

<class name="tablas.Fin" table="fin">
<id name="idfin" type="long">
<generator class="increment"/>
</id>
<set name="indicador" table="finindicador" cascade="all">
<key column="idfin"/>
<many-to-many column="idind" class="tablas.Indicadores"/>
</set>
</class>
</hibernate-mapping>

archivo: Indicadores.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//hibernate/hibernate Mapping DTD 2.0//EN"
"webapps/mml/WEB-INF/src/hibernate-mapping-2.0.dtd">
<hibernate-mapping>

<class name="tablas.Indicadores" table="indicadores">
<id name="idind" type="long">
<generator class="increment"/>
</id>
<set name="fin" table="finindicador" inverse="true" cascade="all">
<key column="idind"/>
<many-to-many column="idfin" class="tablas.Fin"/>
</set>
</class>
</hibernate-mapping>

Y el metodo que tengo para insertar es:

private boolean insertarFin(String xidfin, String xdescripcion) {
boolean b=true;
try {
Session session = HibernateUtil.currentSession();
Transaction tx = session.beginTransaction();
Fin fin = (Fin)session.load(Fin.class, new Long(xidfin));
Indicadores indicador=new Indicadores();
indicador.setDescripcion(xdescripcion);
indicador.getFin().add(fin);
session.save(indicador);
tx.commit();
HibernateUtil.closeSession();
} catch (HibernateException e) {
b=false;
e.printStackTrace();
}
return b;
}


Como podemos ver en el codigo,primero se obtine un registro de la tabla "fin", el mismo se lo adiere a la coleccion que esta en la clase Indicadores y luego guarda los datos. El problema que tengo es que solo inserta en la tabla "indicadores" y tambien deberia insertar los ids de las tabla "fin" e "indicadores" en la tabla "finindicador", pero no lo hace y no entiendo porque.

Si alguien me podria ayudar se lo agradeceria enormemente.