I have three database tables create in SQLLite

Receipt, receiptUDF and ReceiptIndexes
Receipt can have zero or more entries for ReceiptUDFs and Receipt Indexes 
in it.

Configutration for Receipt
________________________

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="ORM" 
namespace="ORM">

  <class name="ORM.Model.Receipt" table="Receipt" >
    <id name="Id" type="long">
      <generator class="increment" />
    </id>

    <property name="createdTimestamp" column="createdTimestamp" 
type="datetime"/>
    <property name="printStatus" column="printStatus" type="int"/>
    <property name="signStatus" column="signStatus" type="int"/>
    <property name="overallStatus" column="overallStatus" type="int"/>
    <property name="uploadStatus" column="uploadStatus" type="int"/>
    <property name="filename" column="filename" type="string" 
not-null="true"/>
    <property name="ReceiptText" column="Text" type="string" 
not-null="true"/>
    <property name="archiveTime" column="archiveTime" type="datetime"/>
    <property name="physicalFile" column="physicalFile" type="string" 
not-null="false"/>
    <property name="physicalFileName" column="physicalFileName" 
type="string" not-null="false"/>
    <property name="transactionNumber" column="transactionNumber" 
type="int"/>
    <
    
    <list name="indexFields" cascade="all-delete-orphan">
      <key column="ReceiptId"/>
      <index column="ReceiptIndexId"/>
      <one-to-many class="ORM.Model.ReceiptIndex" />
    </list>

    <list name="userDefinedFields" cascade="all-delete-orphan">
      <key column="ReceiptId"/>
      <index column="ReceiptUDFId"/>
      <one-to-many class="ORM.Model.ReceiptUDF" />
    </list>

  </class>

</hibernate-mapping>



Configurationn for Receipt UDFs
-----------------------------------------------

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="ORM" 
namespace="ORM">

  <class name="ORM.Model.ReceiptUDF">
    <id name="Id" type="long">
      <generator class="increment" />
    </id>

    <property name="Description" column="Description" type="string" 
not-null="true"/>
    <property name="Value" column="Value" type="string" not-null="false"/>
    <property name="Display" column="Display" type="boolean"/>
    <property name="Required" column="Required" type="boolean"/>
    <property name="Total" column="Total" type="int"/>
    <property name="Multiplier" column="Multiplier" type="int"/>
    <property name="FieldGroup" column="FieldGroup" type="int"/>
    <property name="Type" column="Type" type="int"/>

  </class>

</hibernate-mapping>

Configuration for Receipt Indexes
----------------------------------------------


<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="ORM" 
namespace="ORM">

  <class name="ORM.Model.ReceiptIndex">
    <id name="Id" type="long">
      <generator class="increment" />
    </id>

    <property name="name" column="name" type="string" not-null="true"/>
    <property name="value" column="value" type="string" not-null="true"/>

  </class>

</hibernate-mapping>

Problem:
____________

When I try to save or update the Receipt object It is taking a lot of 
time.  I have experienced that the time taken to add/update a receip 
increases as we have more Receipts in the database.
I looked at the hibernate log files and foind following logs

2012-08-09 16:51:20,362 [9] INFO  NHibernate.Engine.Cascade-processing 
cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for: 
ORM.Model.Receipt
2012-08-09 16:51:20,362 [9] INFO  NHibernate.Engine.Cascade-cascade 
NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: 
ORM.Model.Receipt.indexFields
2012-08-09 16:51:20,362 [9] INFO  NHibernate.Engine.Cascade-done cascade 
NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: 
ORM.Model.Receipt.indexFields
2012-08-09 16:51:20,362 [9] INFO  NHibernate.Engine.Cascade-deleting 
orphans for collection: ORM.Model.Receipt.indexFields
2012-08-09 16:51:20,362 [9] INFO  NHibernate.Engine.Cascade-done deleting 
orphans for collection: ORM.Model.Receipt.indexFields
2012-08-09 16:51:20,362 [9] INFO  NHibernate.Engine.Cascade-cascade 
NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: 
ORM.Model.Receipt.userDefinedFields
2012-08-09 16:51:20,362 [9] INFO  NHibernate.Engine.Cascade-done cascade 
NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: 
ORM.Model.Receipt.userDefinedFields
2012-08-09 16:51:20,374 [9] INFO  NHibernate.Engine.Cascade-deleting 
orphans for collection: ORM.Model.Receipt.userDefinedFields
2012-08-09 16:51:20,374 [9] INFO  NHibernate.Engine.Cascade-done deleting 
orphans for collection: ORM.Model.Receipt.userDefinedFields
2012-08-09 16:51:20,374 [9] INFO  NHibernate.Engine.Cascade-done processing 
cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for: 
ORM.Model.Receipt
2012-08-09 16:51:20,374 [9] INFO  NHibernate.Engine.Cascade-processing 
cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for: 
ORM.Model.Receipt
2012-08-09 16:51:20,374 [9] INFO  NHibernate.Engine.Cascade-cascade 
NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: 
ORM.Model.Receipt.indexFields
2012-08-09 16:51:20,374 [9] INFO  NHibernate.Engine.Cascade-done cascade 
NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: 
ORM.Model.Receipt.indexFields
2012-08-09 16:51:20,574 [9] INFO  NHibernate.Engine.Cascade-deleting 
orphans for collection: ORM.Model.Receipt.indexFields
2012-08-09 16:51:20,574 [9] INFO  NHibernate.Engine.Cascade-done deleting 
orphans for collection: ORM.Model.Receipt.indexFields
2012-08-09 16:51:20,574 [9] INFO  NHibernate.Engine.Cascade-cascade 
NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: 
ORM.Model.Receipt.userDefinedFields
2012-08-09 16:51:20,574 [9] INFO  NHibernate.Engine.Cascade-done cascade 
NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: 
ORM.Model.Receipt.userDefinedFields
2012-08-09 16:51:20,574 [9] INFO  NHibernate.Engine.Cascade-deleting 
orphans for collection: ORM.Model.Receipt.userDefinedFields
2012-08-09 16:51:20,574 [9] INFO  NHibernate.Engine.Cascade-done deleting 
orphans for collection: ORM.Model.Receipt.userDefinedFields
2012-08-09 16:51:20,574 [9] INFO  NHibernate.Engine.Cascade-done processing 
cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for: 
ORM.Model.Receipt

The logs seem to suggest it is firing query for each of the Receipt record.

I need to save only one record and not all.

Following is the code I am using to Save

  /// <summary>
        /// Save a Receipt
        /// </summary>
        /// <param name="receipt"></param>
        public void Add(Receipt receipt)
        {
            using (ITransaction transaction = _session.BeginTransaction())
            {
                
                _session.Save(receipt);
                try
                {
                   // _session.Persist(receipt);
                   transaction.Commit();
                }
                catch (ADOException e)
                {
                    Console.WriteLine(e.ToString());
                }
            }
        }

        /// <summary>
        /// Update a Receipt
        /// </summary>
        /// <param name="receipt"></param>
        public void Update(Receipt receipt)
        {
            using (ITransaction transaction = _session.BeginTransaction())
            {
                _session.Update(receipt);
                try
                {
                    transaction.Commit();
                }
                catch (ADOException e)
                {
                    Console.WriteLine(e.ToString());
                }
            }
        }

Any help in this regard would be appreciated.




-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/nhusers/-/WQa1fyvc-iUJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to