I hope you help me with this issue, since i'm really stuck with this problem. I think it could be related with Id (is native). By the way, i have not been able to configure log4net properly and exception trace is not offering too much information.
Any help will be really appreciated
Hibernate version:
2.0.1.4000
Mapping documents:
Code:
<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="PersistanceStore.Tests"
assembly="PersistanceStore.Tests"
default-lazy="false">
<!-- Mappings for class 'SwitchingOrderAdaptor' -->
<class name="SwitchingOrderAdaptor" table="RX_SWITCHING_ORDERS">
<!-- Identity mapping -->
<id name="Id">
<column name="Id"/>
<generator class="native" />
</id>
<!-- Simple mappings -->
<property name="Name" column="Name"/>
<one-to-one name="SwitchingStepGroupAdaptor" class="SwitchingStepGroupAdaptor" cascade="all-delete-orphan"/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="PersistanceStore.Tests"
assembly="PersistanceStore.Tests"
default-lazy="false">
<!-- Mappings for class 'SwitchingStepGroupAdaptor' -->
<class name="SwitchingStepGroupAdaptor" table="RX_SWITCHING_STEP_GROUPS">
<!-- Identity mapping -->
<id name="Id">
<column name="Id"/>
<generator class="native"/>
</id>
<!-- Simple mappings -->
<property name="GroupName" column="GroupName"/>
<property name="StepCount" column="StepCount"/>
<!--</component>-->
<bag name="SwitchingStepAdaptors" table="RX_SWITCHING_STEPS" cascade="all">
<key column="SwitchingStepGroupId" />
<one-to-many class="SwitchingStepAdaptor" />
</bag>
<many-to-one name="SwitchingOrderAdaptor" column="SwitchingOrderId" cascade="save-update"/>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="PersistanceStore.Tests"
assembly="PersistanceStore.Tests"
default-lazy="false">
<!-- Mappings for class 'SwitchingStepGroupAdaptor' -->
<class name="SwitchingStepAdaptor" table="RX_SWITCHING_STEPS">
<!-- Identity mapping -->
<id name="Id">
<column name="Id"/>
<generator class="native"/>
</id>
<!-- Simple mappings -->
<property name="StepCount"/>
<!--<property name="CurrentTaskState"/>
<property name="Description"/>
<property name="Name"/>
<property name="TaskStatus"/>
<property name="Title"/>-->
<many-to-one name="SwitchingStepGroupAdaptor" column="SwitchingStepGroupId" cascade ="save-update"/>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():Code:
using (ISession _session = _sessionFactory.OpenSession())
{
using (_session.BeginTransaction())
{
_session.Save(entity);
_session.Transaction.Commit();
}
}
Full stack trace of any exception that occurs:Code:
NHibernate.StaleStateException: Unexpected row count: 0; expected: 1
at NHibernate.AdoNet.Expectations.BasicExpectation.VerifyOutcomeNonBatched(Int32 rowCount, IDbCommand statement)
at NHibernate.AdoNet.NonBatchingBatcher.AddToBatch(IExpectation expectation)
at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.UpdateOrInsert(Object id, Object[] fields, Object[] oldFields, Object rowId, Boolean[] includeProperty, Int32 j, Object oldVersion, Object obj, SqlCommandInfo sql, ISessionImplementor session)
at NHibernate.Persister.Entity.AbstractEntityPersister.Update(Object id, Object[] fields, Int32[] dirtyFields, Boolean hasDirtyCollection, Object[] oldFields, Object oldVersion, Object obj, Object rowId, ISessionImplementor session)
at NHibernate.Action.EntityUpdateAction.Execute()
at NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
at NHibernate.Engine.ActionQueue.ExecuteActions(IList list)
at NHibernate.Engine.ActionQueue.ExecuteActions()
at NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session)
at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event)
at NHibernate.Impl.SessionImpl.Flush()
at NHibernate.Transaction.AdoTransaction.Commit()
at Miner.Responder.PersistanceStore.RepositoryNHibernate`1.Save(T entity) in D:\switchOrders\source\Miner.Responder\Miner.Responder.PersistanceStore\RepositoryNHibernate.cs:line 82
at Miner.Responder.PersistanceStore.RepositoryServiceLocator`1.SaveInRepositories(T objectToSave) in D:\switchOrders\source\Miner.Responder\Miner.Responder.PersistanceStore\RepositoryServiceLocator.cs:line 41
at PersistanceStore.Tests.TestRepositoryServiceLocator.SwitchingOrder() in D:\switchOrders\source\Miner.Responder\PersistanceStore.Tests\TestRepositoryServiceLocator.cs:line 358
Name and version of the database you are using:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">
NHibernate.Connection.DriverConnectionProvider
</property>
<property name="dialect">
NHibernate.Dialect.MsSql2005Dialect
</property>
<property name="connection.driver_class">
NHibernate.Driver.SqlClientDriver
</property>
<property name="connection.connection_string">
Data Source=(local)\SQLExpress;Initial Catalog=StoragePersistanceTest;Integrated Security=True;Pooling=False
</property>
</session-factory>
</hibernate-configuration>
The generated SQL (show_sql=true):
CREATE TABLE [dbo].[RX_SWITCHING_ORDERS](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL,
CONSTRAINT [PK_RX_SWITCHING_ORDERS] PRIMARY KEY CLUSTERED
([Id] ASC)
WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]
CREATE TABLE [dbo].[RX_SWITCHING_STEP_GROUPS](
[Id] [int] IDENTITY(1,1) NOT NULL,
[GroupName] [varchar](50) NULL,
[StepCount] [int] NULL,
[SwitchingStepGroupId] [int] NULL,
[SwitchingOrderId] [int] NOT NULL,
CONSTRAINT [PK_RX_SWITCHING_STEP_GROUPS] PRIMARY KEY CLUSTERED
([Id] ASC)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]
CREATE TABLE [dbo].[RX_SWITCHING_STEPS](
[Id] [int] IDENTITY(1,1) NOT NULL,
[StepCount] [int] NULL,
[CurrentTaskState] [int] NULL,
[Description] [varchar](250) NULL,
[Name] [varchar](50) NULL,
[TaskStatus] [int] NULL,
[Title] [varchar](50) NULL,
[SwitchingStepGroupId] [int] NOT NULL,
CONSTRAINT [PK_RX_SWITCHING_STEPS] PRIMARY KEY CLUSTERED
([Id] ASC)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[RX_SWITCHING_STEP_GROUPS] WITH CHECK ADD CONSTRAINT [FK_RX_SWITCHING_STEP_GROUPS_RX_SWITCHING_ORDERS1] FOREIGN KEY([SwitchingOrderId])
REFERENCES [dbo].[RX_SWITCHING_ORDERS] ([Id])
ALTER TABLE [dbo].[RX_SWITCHING_STEP_GROUPS] CHECK CONSTRAINT [FK_RX_SWITCHING_STEP_GROUPS_RX_SWITCHING_ORDERS1]
ALTER TABLE [dbo].[RX_SWITCHING_STEPS] WITH CHECK ADD CONSTRAINT [FK_RX_SWITCHING_STEPS_RX_SWITCHING_STEP_GROUPS1] FOREIGN KEY([SwitchingStepGroupId])
REFERENCES [dbo].[RX_SWITCHING_STEP_GROUPS] ([Id])
ALTER TABLE [dbo].[RX_SWITCHING_STEPS] CHECK CONSTRAINT [FK_RX_SWITCHING_STEPS_RX_SWITCHING_STEP_GROUPS1]
Debug level Hibernate log excerpt:
PS:I've edited so code can be easier read