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.