Hi!
I'm having some problems while saving a new object in my database. I don´t know why. Recently I have changed the generator class of my ids from assigned to identity, and when the application fails, the error message says that my id is null, and it couldn't be saved.
The problem is when I try to save an IdentName object.
Hibernate version: 1.0.2
Mapping documents:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" default-lazy="false">
<class name="dataAccess.csfiles.datospersonalesygrupo.IdentName, dataAccess" table="identname">
<id name="IdName" column="idname" type="Int32">
<generator class="identity" />
</id>
<property name="Name" column="name" type="String"/>
</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.MemberData, dataAccess" table="datospersonales">
<id name="IdPersonales" column="idpersonales" type="Int32">
<generator class="identity" />
</id>
<bag name="Idents" table="idents">
<key column="idpersonales" />
<composite-element class="dataAccess.csfiles.datospersonalesygrupo.Ident, 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.IdentName, dataAccess"
column="idname"/>
</composite-element>
</bag>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():
public void saveIdentName(IdentName 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;
}
}
Full stack trace of any exception that occurs:
[SqlException (0x80131904): Cannot insert the value NULL into column 'idName', table 'curriculum.dbo.identname'; column does not allow nulls. INSERT 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(TdsParserStateObject stateObj) +199
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2300
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +31
System.Data.SqlClient.SqlDataReader.get_MetaData() +62
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +294
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.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +20
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +107
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +10
System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader() +9
NHibernate.Impl.BatcherImpl.ExecuteReader(IDbCommand cmd) in c:\net\nhibernate-1.2.0.Beta1\nhibernate\src\NHibernate\Impl\BatcherImpl.cs:182
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj, ISessionImplementor session) in c:\net\nhibernate-1.2.0.Beta1\nhibernate\src\NHibernate\Persister\Entity\AbstractEntityPersister.cs:1972
[ADOException: could not insert: [dataAccess.csfiles.datospersonalesygrupo.IdentName][SQL: INSERT INTO identname (name) VALUES (?)]]
dataAccess.csfiles.DBManager.saveIdentName(IdentName identName) in C:\Documents and Settings\César Díaz García\Mis documentos\Visual Studio 2005\Projects\dataAccess\dataAccess\DBManager.cs:169
Controlador.saveIdentName(IdentName identName) in c:\Documents and Settings\César Díaz García\Mis documentos\Visual Studio 2005\WebSites\proyecto\App_Code\Controlador.cs:80
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:69
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.RaisePostBackEvent(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
Name and version of the database you are using:
SQL Server 9.0.1399
The generated SQL (show_sql=true):
SQL: INSERT INTO identname (name) VALUES (?)
Debug level Hibernate log excerpt:
|