Hola que tal, yo nuevamente

Bueno Nestor, pude solucionar el problema, revise la documentacion de
los puntos 5.1.4.6 y 7.4 que me mencionaste y me ayudo mucho. Muchas
gracias por la ayuda :D

Ahora cuento la historia por si a alguien le da el mismo problema.

Revise el archivo nhibernate-mapping.xsd de nhibernate, busque la
parte de composite-id especificamente el unsaved-value, este segun el
archivo me permite colocar dos valores, (none o any), con ambos probe,
compile el hibernate una vez hecho el cambio y aun con el
(SaveorUpdate) me mandaba a actualizar en vez de guardar.

Tambien probe la opción de colocar en la estructura con id compuesto
el campo <version name="LastModifiedOn" column="LastModifiedOn"
type="timestamp" />, en este caso si me mando a guardar en vez de
actualizar, pero no me gustaba la idea de agregar ese campo
"LastModifiedOn" a mi tabla, ademas que me daba otro error de fuera de
indices

:S

"Index was out of range. Must be non-negative and less than the size
of the collection." al momento de

Entonces continue la busqueda y encontre un ejemplo en el grupo con
esta opción:

http://groups.google.com.ar/group/nhibernate-hispano/browse_thread/thread/20171bd616889cc6/ff5ca6272c472e6c?lnk=gst&q=composite-id+guillermo#ff5ca6272c472e6c

Con lo cual pude cambiar mi estructura a como indica Guillermo en el
ejemplo "TestConn.zip" y me quedo asi:

Clase: TipoListado


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="PDVSA.Negocio.Entidades.Base"
assembly="Entidades.Base"
default-lazy="true">
  <meta
attribute="extends">PDVSA.Business.Entities.Core.AbstractEntity</meta>
  <meta attribute="extends-
composite">PDVSA.Business.Entities.Core.CompositeID</meta>
  <meta attribute="generate-typeconverter"></meta>

  <class name="PDVSA.Negocio.Entidades.Base.TipoListado,
Entidades.Base" table="T_TipoListado">

    <composite-id unsaved-value="any">
      <key-property name="PK_CodigoTipoListado"
column="PK_CodigoTipoListado"  type="Int64" />
      <key-property name="PK_CodigoListado" column="PK_CodigoListado"
type="Int64" />
    </composite-id>

    <property name="DescripcionTipoListado"
column="DescripcionTipoListado" type="String" length="100">
      <meta attribute="field-browsable">true</meta>
      <meta attribute="field-readonly">false</meta>
      <meta attribute="field-category">GeneralCategory</meta>
      <meta attribute="field-propertysort">3</meta>
    </property>

  </class>

</hibernate-mapping>

-------------------------------------

Clase: Listado

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="PDVSA.Negocio.Entidades.Base"
assembly="Entidades.Base"
default-lazy="true">
   <class name="PDVSA.Negocio.Entidades.Base.Listado"
table="T_Listado">

      <meta
attribute="extends">PDVSA.Business.Entities.Core.AbstractEntity</meta>
      <meta attribute="default-property-tostring">DescripcionListado</
meta>
      <meta attribute ="generate-typeconverter"></meta>

      <id name="ID" column="PK_CodigoListado" type="Int64" unsaved-
value="0">
        <meta attribute="field-browsable">false</meta>
        <meta attribute="field-readonly">true</meta>
        <meta attribute="field-category">GeneralCategory</meta>
        <meta attribute="field-propertysort">1</meta>
        <generator class="sequence">
           <param name="sequence">T_Listado_PK_CodigoListado_seq</param>
        </generator>
      </id>

      <property name="DescripcionListado" column="DescripcionListado"
type="String" length="100">
        <meta attribute="field-browsable">true</meta>
        <meta attribute="field-readonly">false</meta>
        <meta attribute="field-category">GeneralCategory</meta>
        <meta attribute="field-propertysort">2</meta>
      </property>

      <bag name="TipoListados" table="T_TipoListado" inverse="true">
        <key foreign-key="PK_CodigoListado" column="PK_CodigoListado"/
>
        <one-to-many class="PDVSA.Negocio.Entidades.Base.TipoListado,
Entidades.Base" />
      </bag>

  </class>
</hibernate-mapping>

Teniendo en cuenta unsaved-value="any" en el composite-id  de la clase
TipoListado

Genere la base de datos e inclui algunos datos en T_Listado

Hice una prueba de inserción bastante simple y funciono:

// PRUEBA SIMPLE PARA AGREGAR AL COMPOSITE-ID
Listado clsListado = sessionContext.GetById<Listado>((long)1);
TipoListado clsTipoListado = new TipoListado();
clsTipoListado.PK_CodigoListado = clsListado.ID;
clsTipoListado.PK_CodigoTipoListado = 63;
clsTipoListado.DescripcionTipoListado = "prueba";
sessionContext.SaveOrUpdate<TipoListado>(clsTipoListado);

Claramente para insertar un valor nuevo, lo ideal es verificar primero
que el registro no exista en la tabla de la base de datos, pues en
este caso se haria una actualización en vez de una inserción.

Gracias por la ayuda :)

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a