Insertar registro many to many

70 views
Skip to first unread message

Carlos Berdejo

unread,
Mar 25, 2013, 5:28:53 PM3/25/13
to nhibernat...@googlegroups.com
Hola buenas tardes:

Estoy empezando a usar Nhibernate, y tengo un problema.

Tengo usuarios que pueden tener uno o mas roles, para solucionarlo a nivel base de datos agregue una tercera tabla UsuarioRol, teniendo 3 tablas (Usuarios, UsuarioRol y CatUsuarioRol), de manera que quiero relaccionar de muchos a muchos las tablas  Usuario - CatUsuariol

La Tabla Usuarios_rols, solo tendria los campos (usuario-id y rol_id)

Usuarios_rols  
    usuario_id(pk)
    rol_id(pk)


Usuarios
    usuario_id(pk)
    otros campos

Cat_Usuario_rol
    rol_id(pk)
    otros campos


Este es mi usuario.hbm.xml

<?xml version="1.0"?>
<hibernate-mapping assembly="castor" namespace="castor.core" xmlns="urn:nhibernate-mapping-2.2">
  <class name="Usuario" table="usuario" lazy="false" >
 
  <id name="UsuarioId">
      <column name="usuario_id" sql-type="integer" not-null="true" />
      <generator class="identity">
          <param name="sequence">usuario_usuario_id_seq</param>
      </generator>
    </id>
   <bag name="CatUsuarioRols" table="usuario_rol" lazy="false" inverse="true" >
      <key column="usuario_id" />
         <many-to-many class="CatUsuarioRol" column="rol_id" />
    </bag>

<property name="Username">
      <column name="username" sql-type="character varying" not-null="true" />
    </property>

(...) Otros atributos

   
  </class>
</hibernate-mapping>

En mi CatUsuarioRol.hbm.xml
Solo tengo el id, y los property de la tabla, ya que lei que al tener activada laa propiedad inverse="true" en la relaccion many to many no es necesaria colocarla en el otro mapping

Si hago una consulta a la base de datos puedo ver que esta la relacción y muestra los usuarios con sus respectivos roles, que agregue manualmente en la base de datos

No existe el UsuarioRol.hbm.xml ni la entidad UsuarioRol, ¿Debo de generarlos?

Cuando agrego un usuario, el codigo que utilizo es el siguiente
 
Usuario nueva = new Usuario()
            {
              Username = Request.Form["username"],
              Activo = true,
              FechaMod =  DateTime.Now,
             (...) Otros atributos
           
            };

Mi pregunta como puedo hacer para que se guarden los roles.

Saludos!

Nicolás Marzoni

unread,
Mar 25, 2013, 5:35:09 PM3/25/13
to nhibernat...@googlegroups.com
Carlos, revisá los nombres de las tablas.
Por ejemplo, estás poniendo  table="usuario" cuando la tabla se llama Usuarios, lo mismo con usuario_rol y Usuarios_Rols.
 
Te dejo la referencia a los mapeos de colecciones.
 
Saludos.
Nicolás.

--
--
Para escribir al Grupo, hágalo a esta dirección: NHibernat...@googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
---
Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a nhibernate-hisp...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 



--
Nicolás Matías Marzoni
Reply all
Reply to author
Forward
0 new messages