Ya he probado con eso, quedándome el mapping de DatosPersonalesDA así:

<?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="Emails" cascade="all-delete-orphan">
      <key column="idpersonales"/>
      <one-to-many 
class="dataAccess.csfiles.datospersonalesygrupo.EmailDA, dataAccess"/>
    </bag>
  </class>
</hibernate-mapping>

y el error sigue siendo exactamente el mismo. Alguna otra sugerencia?

On 30 ene, 18:11, "Dario Quintana" <[EMAIL PROTECTED]> 
wrote:
> La columna idPersonales dentro de la clase EmailDA no está permitiendo
> valores null. NH está haciendo un Update insertando null en
> idPersonales.
>
> Pobrá con cascade="all-delete-orphan" a ver q pasa.
>
> Saludos
>
> On 1/30/07, Chili <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
> > Bien, mis clases son éstas:
>
> > public class DatosPersonalesDA
> >     {
> >         private int idPersonales;
> >         private string name, surname, place, urlPhoto, urlPage;
> >         private DateTime date;
> >         private IList<EmailDA> emails;
> >         private IList<TelephoneDA> telephones;
> >         private IList<PostalDA> postals;
> >         private IList<IdentsDA> idents;
>
> >         // Aquí irían todas las propiedades de cada atributo
> > }
>
> > public class EmailDA
> >     {
> >         private int idPersonales;
> >         private string email;
>
> >         // Propiedades
> > }
>
> > Ahora los mapping de cada clase:
>
> > <?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="Emails" cascade="all">
> >       <key column="idpersonales"/>
> >       <one-to-many
> > class="dataAccess.csfiles.datospersonalesygrupo.EmailDA, dataAccess"/>
> >     </bag>
> >   </class>
> > </hibernate-mapping>
>
> > Omito el mapeo del resto de atributos.
>
> > <?xml version="1.0" encoding="utf-8" ?>
> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-
> > lazy="false">
> >   <class name="dataAccess.csfiles.datospersonalesygrupo.EmailDA,
> > dataAccess" table="email" dynamic-update="true">
> >     <composite-id>
> >       <key-property name="IdPersonales" column="idpersonales"/>
> >       <key-property name="Email" column="mail"/>
> >     </composite-id>
> >   </class>
> > </hibernate-mapping>
>
> > Ahora bien, el problema es que al borrar un email, y luego actualizar,
> > me da error. Actualizo un member, que se relaciona con las clases
> > anteriores de la siguiente manera: un member tiene un curriculum, un
> > curriculum tiene unos datos personales, y los datos personales
> > contienen una colección de Emails.
>
> >     public class MemberDA
> >     {
> >         private string loginName, name, degree, category, laboralUnit,
> > company;
> >         private CurriculumDA curriculum;
> >         private IList<DatosGrupoInvestigacionDA> gruposInvestigacion;
> >         private RolDA rol;
> > }
>
> >     public class CurriculumDA
> >     {
> >         private int idCurriculum;
> >         private string version, format;
> >         private DateTime date;
> >         private DatosPersonalesDA datosPersonales;
> >         private IList<ItemsJobDescriptionDA> trabajos;
> > }
>
> > El fragmento de código donde salta la excepción es el siguiente:
>
> >         public void saveMember(MemberDA member) {
> >             if (!session.IsConnected)
> >                 session.Reconnect();
> >             ITransaction transaction = null;
> >             try
> >             {
> >                 transaction = session.BeginTransaction();
> >                 session.Update(member);
> >                 transaction.Commit();
> >                 session.Disconnect();
> >             }
> >             catch (Exception e)
> >             {
> >                 transaction.Rollback();
> >                 session.Disconnect();
> >                 throw e;
> >             }
> >         }
>
> > Más concretamente, en el transaction.Commit();
>
> > El mensaje de la excepción es:
>
> > Cannot insert the value NULL into column 'idpersonales', table
> > 'curriculum.dbo.email'; column does not allow nulls. UPDATE fails.
> > The statement has been terminated.
>
> >  Exception Details: System.Data.SqlClient.SqlException: Cannot insert
> > the value NULL into column 'idpersonales', table
> > 'curriculum.dbo.email'; column does not allow nulls. UPDATE fails.
>
> > Stack Trace:
>
> > [SqlException (0x80131904): Cannot insert the value NULL into column
> > 'idpersonales', table 'curriculum.dbo.email'; column does not allow
> > nulls. UPDATE fails.
> > The statement has been terminated.]
> >    System.Data.SqlClient.SqlConnection.OnError(SqlException exception,
> > Boolean breakConnection) +177
> >    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
> > exception, Boolean breakConnection) +68
>
> > System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserState
> > Object stateObj) +199
> >    System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,
> > SqlCommand cmdHandler, SqlDataReader dataStream,
> > BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
> > stateObj) +2300
> >    System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader
> > ds, RunBehavior runBehavior, String resetOptionsString) +147
>
> > System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior
> > cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean
> > async) +1021
> >    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior
> > cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String
> > method, DbAsyncResult result) +314
>
> > System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult
> > result, String methodName, Boolean sendToPipe) +413
> >    System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +115
> >    NHibernate.Impl.BatcherImpl.ExecuteNonQuery(IDbCommand cmd) in c:
> > \net\nhibernate-1.2.0.Beta1\nhibernate\src\NHibernate\Impl
> > \BatcherImpl.cs:172
>
> > NHibernate.Persister.Collection.AbstractCollectionPersister.DeleteRows(
> > IPersistentCollection collection, Object id, ISessionImplementor
> > session) in c:\net\nhibernate-1.2.0.Beta1\nhibernate\src\NHibernate
> > \Persister\Collection\AbstractCollectionPersister.cs:947
>
> > [ADOException: could not delete collection rows:
> > [dataAccess.csfiles.datospersonalesygrupo.DatosPersonalesDA.Emails#1]]
> >    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:51
> >    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +75
> >    System.Web.UI.WebControls.Button.RaisePostBackEvent(String
> > eventArgument) +97
>
> > System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.Ra
> > isePostBackEvent(String eventArgument) +7
> >    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler
> > sourceControl, String eventArgument) +11
> >    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
> > +33
> >    System.Web.UI.Page.ProcessRequestMain(Boolean
> > includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
> > +4880
>
> > The statement has been terminated.--
> Dario Quintanahttp://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