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