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 Quintana
http://blog.darioquintana.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