>En cuanto al error, estas seguro que la base de datos tiene una propiedad
>identity en la primary key?

Sí, estoy utilizando SQL Server, y si no me equivoco, soporta identity
en el primary key.

> por ahi es importante
> tambien  la exception class, o sea, si es SqlException,  u otra. Por otro
> lado las excepciones de nhib y mas qeu nada cuando son de parsing del hbm
> suele ser mucho mas importante la innerException.

La excepción es una NHibernate.ADOException, y el mensaje es:

{"could not insert:
[dataAccess.csfiles.datospersonalesygrupo.IdentNameDA][SQL: INSERT
INTO identname (name) VALUES (?)]"}

La innerException es de tipo System.Data.SqlClient.SqlException y el
mensaje es:

{"Cannot insert the value NULL into column 'idName', table
'curriculum.dbo.identname'; column does not allow nulls. INSERT fails.
\r\nThe statement has been terminated."}


On 3 feb, 20:28, GLM.net <[EMAIL PROTECTED]> wrote:
> NHibernate soporta grabar los hijos al grabar los padres, pero cuando los
> hijos no son entity sino por ejemplo un bag de composite-elements.
>
> No tengo mucha experiencia en recomendar algo, pero lo soporta :D
>
> Es el mismo caso de los emails..
> vos podrias haber usado "element" en vez de composite-element, el segundo te
> da mas posibilidades para agregarle mas columnas, usar tu propia
> clase, relacioens, etc.
>
> En cuanto al error, estas seguro que la base de datos tiene una propiedad
> identity en la primary key?
> Una herramienta muy util es siempre ver qeu query esta haciendo nhibernate.
> Yo suelo usar profiler de sql server, porque siempre uso sql server, pero se
> que nhib tiene metodos para ver los queryes que ejecuta. A veces la solucion
> esta ahi.
>
> "me da el error de que no se puede insertar null" por ahi es importante
> tambien  la exception class, o sea, si es SqlException,  u otra. Por otro
> lado las excepciones de nhib y mas qeu nada cuando son de parsing del hbm
> suele ser mucho mas importante la innerException.
>
> Saludos
>
> On 2/3/07, Chili <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
> > De acuerdo, mi duda era porque creía que quizá NHibernate podría
> > arrastrar en los objetos padre a los objetos hijo y guardarlos todos a
> > la vez.
>
> > Ahora otra pequeña duda. Estoy intentando grabar los hijos, y tengo un
> > problema con las claves.
>
> > En la clave primaria de IdentNameDA tengo <generator class="identity" /
> > > y unsaved-value="0". Ahora estoy intentando mandar un objeto con su
> > id a cero, para que NHibernate sepa que es un objeto nuevo, y por
> > tanto proceda a guardarlo en la bd. Con el generator identity tengo
> > entendido (por lo que he leído) que el propio NHibernate genera las
> > claves, por lo tanto no debería hacer nada más. No obstante, me da
> > error porque me dice que no se pueden insertar Null en la clave
> > primaria (obvio!!!). Os pongo el código y todo:
>
> > <?xml version="1.0" encoding="utf-8" ?>
> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-
> > lazy="false">
> > <class name="dataAccess.csfiles.datospersonalesygrupo.IdentNameDA,
> > dataAccess" table="identname">
> >    <id name="IdName" column="idname" type="Int32" unsaved-value="0">
> >      <generator class="identity" />
> >    </id>
> >    <property name="Name" column="name" type="String"/>
> > </class>
> > </hibernate-mapping>
>
> > namespace dataAccess.csfiles.datospersonalesygrupo
> > {
> >    public class IdentNameDA
> >    {
> >        private int idname;
> >        private string name;
>
> >        public int IdName {
> >            get {
> >                return idname;
> >            }
> >            set {
> >                idname = value;
> >            }
> >        }
>
> >        public string Name {
> >            get {
> >                return name;
> >            }
> >            set {
> >                name = value;
> >            }
> >        }
> >    }
> > }
>
> > Lo creo y relleno su campo name:
>
> >            IdentNameDA identName = new IdentNameDA();
> >            identName.Name = (string)r["Documento"];
> >            identName.IdName =
> > Controlador.Instance.getIdentNameId(identName.Name); // Aquí no
> > encuentra nada, por lo que va con idName a cero. Ya lo he //comprabado
> > depurando.
>
> > Aquí lo guardo:
>
> >        public void saveIdentName(IdentNameDA identName) {
> >            if (!session.IsConnected)
> >                session.Reconnect();
>
> >            ITransaction transaction = null;
>
> >            try
> >            {
> >                transaction = session.BeginTransaction();
> >                session.SaveOrUpdate(identName);
> >                transaction.Commit();
> >                session.Disconnect();
> >            }
> >            catch (Exception e)
> >            {
> >                transaction.Rollback();
> >                session.Disconnect();
> >                throw e;
> >            }
> >        }
>
> > On 3 feb, 18:06, "Dario Quintana" <[EMAIL PROTECTED]>
> > wrote:
> > > Respondo ràpido:
>
> > > estás queriendo guardar el hijo, pero no tenes guardado el padre.
> > > Estás haciendo
>
> > > myOrderItem.Order = myOrder;
> > > Save(myOrderItem);
>
> > > Antes tendrías que hacer Save(myOrder);
>
> > > Save(myOrder);
> > > myOrderItem.Order = myOrder;
> > > Save(myOrderItem);
>
> > > fijate si es eso.
>
> > > On 2/3/07, Chili <[EMAIL PROTECTED]> wrote:
>
> > > > Hola a todos,
>
> > > > Os presento un nuevo problema. Estoy intentando salvar un nuevo objeto
> > > > a mi base de datos. El problema es que es un objeto "hijo", q va
> > > > dentro de otro objeto padre. Es decir, la estrucura sería así:
>
> > > > DatosPersonalesDA tiene una colección de objetos IdentDA, y éste a su
> > > > vez tiene una many-to-one a un objeto de tipo IdentNameDA.
>
> > > > Os pongo la parte de los mapping relevantes de estos tres archivos.
>
> > > > <?xml version="1.0" encoding="utf-8" ?>
> > > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-
> > > > lazy="false">
> > > >   <class
> > > > name="dataAccess.csfiles.datospersonalesygrupo.DatosPersonalesDA,
> > > > dataAccess" table="datospersonales">
> > > >     <id name="IdPersonales" column="idpersonales">
> > > >       <generator class="assigned" />
> > > >     </id>
> > > >     <bag name="Idents" table="idents">
> > > >       <key column="idpersonales" />
> > > >       <composite-element
> > > > class="dataAccess.csfiles.datospersonalesygrupo.IdentsDA, dataAccess">
> > > >         <property name="Number" column="number" type="String"/>
> > > >         <property name="Place" column="place" type="String"/>
> > > >         <property name="Date" column="date"/>
> > > >         <many-to-one name="Name" cascade="save-update"
> > > >           class="dataAccess.csfiles.datospersonalesygrupo.IdentNameDA,
> > > > dataAccess"
> > > >           column="idname"/>
> > > >       </composite-element>
> > > >     </bag>
> > > >   </class>
> > > > </hibernate-mapping>
>
> > > > <?xml version="1.0" encoding="utf-8" ?>
> > > > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-
> > > > lazy="false">
> > > >   <class name="dataAccess.csfiles.datospersonalesygrupo.IdentNameDA,
> > > > dataAccess" table="identname">
> > > >     <id name="IdName" column="idname" type="Int32" unsaved-value="0">
> > > >       <generator class="identity" />
> > > >     </id>
> > > >     <property name="Name" column="name" type="String"/>
> > > >   </class>
> > > > </hibernate-mapping>
>
> > > > Ahora os pongo los cs:
>
> > > > namespace dataAccess.csfiles.datospersonalesygrupo
> > > > {
> > > >     public class DatosPersonalesDA
> > > >     {
> > > >         private int idPersonales;
> > > >         private IList<IdentsDA> idents;
> > > > }
> > > > }
>
> > > > namespace dataAccess.csfiles.datospersonalesygrupo
> > > > {
> > > >     public class IdentsDA
> > > >     {
> > > >         private string place, number;
> > > >         private DateTime date;
> > > >         private IdentNameDA name;
> > > > }
> > > > }
>
> > > > namespace dataAccess.csfiles.datospersonalesygrupo
> > > > {
> > > >     public class IdentNameDA
> > > >     {
> > > >         private int idname;
> > > >         private string name;
> > > > }
> > > > }
>
> > > > Al borrar un determinado objeto IdentDA o modificar uno ya existente
> > > > no tengo ningún problema, pero al borrarlo y actualizar la clase padre
> > > > me casca aquí:
>
> > > > try
> > > >             {
> > > >                 transaction = session.BeginTransaction();
> > > >                 session.SaveOrUpdate(member);
> > > >                 transaction.Commit();
> > > >                 session.Disconnect();
> > > >             }
>
> > > >  object references an unsaved transient instance - save the transient
> > > > instance before flushing:
> > > > dataAccess.csfiles.datospersonalesygrupo.IdentNameDA
> > > > Description: An unhandled exception occurred during the execution of
> > > > the current web request. Please review the stack trace for more
> > > > information about the error and where it originated in the code.
>
> > > > Exception Details: NHibernate.TransientObjectException: object
> > > > references an unsaved transient instance - save the transient instance
> > > > before flushing: dataAccess.csfiles.datospersonalesygrupo.IdentNameDA
>
> > > > Stack Trace:
>
> > > > [TransientObjectException: object references an unsaved transient
> > > > instance - save the transient instance before flushing:
> > > > dataAccess.csfiles.datospersonalesygrupo.IdentNameDA]
> > > >    dataAccess.csfiles.DBManager.saveMember(MemberDA member) in C:
> > > > \Documents and Settings\César Díaz García\Mis documentos\Visual Studio
> > > > 2005\Projects\dataAccess\dataAccess\DBManager.cs:97
> > > >    Controlador.saveMember(MemberDA member) in c:\Documents and
> > Settings
> > > > \César Díaz García\Mis documentos\Visual Studio 2005\WebSites\proyecto
> > > > \App_Code\Controlador.cs:58
> > > >    web_privado_perfil_modificar.ButtonGuardar_Click(Object sender,
> > > > EventArgs e) in c:\Documents and Settings\César Díaz García\Mis
> > > > documentos\Visual Studio 2005\WebSites\proyecto\web\privado
> > > > \perfil_modificar.aspx.cs:104
> > > >    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +96
> > > >    System.Web.UI.WebControls.Button.RaisePostBackEvent(String
> > > > eventArgument) +116
>
> > System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
> > (String
> > > > eventArgument) +31
> > > >    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
> > > > sourceControl, String eventArgument) +32
> > > >    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
> > > > +72
> > > >    System.Web.UI.Page.ProcessRequestMain(Boolean
> > > > includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
> > > > +3834
>
> > > --
> > > Dario Quintanahttp://blog.darioquintana.com.ar
>
> --
> GLM
> MCAD / MCP - Argentinawww.glmnet.com.ar


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

Responder a