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
-~----------~----~----~----~------~----~------~--~---