object references an unsaved transient instance - save the transient instance before flushing or set cascade action for the property to something that would make it autosave

1,406 views
Skip to first unread message

Atilla İlhan KARTAL

unread,
Jun 17, 2014, 5:53:36 AM6/17/14
to nhu...@googlegroups.com
Dear All;

When i recreate a collection in Payment Entity saveOrUpdate method throwed this exception. My Releation Mappings is AllDeleteOrphan but i dont resolve this problem.

I am working on this error two days ago. I'm going crazy :'( 

I tested this solution method.

1- Manual handle cascade operation.
    a-Delete exists PartnerTransactions on before save
    b-Save Payment entity
    c- Save new PartnerTransactions 

 but throw object references an unsaved transient instance - save the transient instance before merge.

What do you think about it.?

object references an unsaved transient instance - save the transient instance before flushing or set cascade action for the property to something that would make it autosave. Type: Core.PartnerManagement.PartnerTransaction, Entity: Core.PartnerManagement.PartnerTransaction


        public class PaymentMap : ClassMap<Payment>
        {
            public PaymentMap()
            {
                Table("SALES_TB_PAYMENT");
                SchemaAction.None();
                Id(x => x.ID, "ID").GeneratedBy.Identity();
                Map(x => x.PaymentDate, "PaymentDate");
                Map(x => x.Serial, "Serial");
                Map(x => x.DocumentNumber, "DocumentNumber");
                References(x => x.Partner, "PartnerId");
                References(x => x.Cash, "CashId");
                References(x => x.Pos, "PosId");
                References(x => x.DocumentType, "DocumentTypeId");
                Map(x => x.Description, "Description");
                
                Map(x => x.ExchangeRate, "ExchangeRate");
                Map(x => x.AccountExchangeRate, "AccountExchangeRate");
                Map(x => x.Amount, "Amount");
                Map(x => x.AccountAmount, "AccountAmount");
                Map(x => x.LocalAmount, "LocalAmount");
                Map(x => x.BankSEQ, "BankSEQ");
                References(x => x.Bank, "BankId");
                Map(x => x.IBAN, "IBAN");
                Map(x => x.AccountNo, "AccountNo");
                Map(x => x.BankBranch, "BankBranch");
                Map(x => x.ReferenceNo, "ReferenceNo");
                Map(x => x.SlipNo, "SlipNo");
                Map(x => x.RewardAmount, "RewardAmount");
                Map(x => x.ComissionRate, "ComissionRate");
                Map(x => x.ComissionAmount, "ComissionAmount");
                Map(x => x.LocalComissionAmount, "LocalComissionAmount");
                Map(x => x.Installment, "Installment");
                
                References(x => x.Currency, "CurrencyId");
                References(x => x.LocalCurrency, "LocalCurrencyId");
                References(x => x.AccountCurrency, "AccountCurrencyId");
                References(x => x.CreditCard, "CreditCardId");
                HasMany(x => x.Transactions)
                    .KeyColumn("PaymentId")
                    .Cascade.AllDeleteOrphan()
                    .AsBag();
            }
        }


        public class PartnerTransactionMap : ClassMap<PartnerTransaction>
        {
            public PartnerTransactionMap()
            {
                Table("CORE_TB_PARTNERTRANSACTION");
                SchemaAction.None();
                Id(x => x.ID, "ID").GeneratedBy.Identity().UnsavedValue(0L);
                Map(x => x.TransactionDateTime, "TransactionDateTime");
                References(x => x.Partner, "PartnerId");
                References(x => x.Currency, "CurrencyId");
                References(x => x.LocalCurrency, "LocalCurrencyId");
                Map(x => x.ExchangeRate, "ExchangeRate");
                Map(x => x.Debt, "Debt");
                Map(x => x.Receivable, "Receivable");
                Map(x => x.LocalDebt, "LocalDebt");
                Map(x => x.LocalReceivable, "LocalReceivable");
                Map(x => x.IsLock, "IsLock");
                Map(x => x.Expiry, "Expiry");
                Map(x => x.OpenBalance, "OpenBalance");
                Map(x => x.LocalOpenBalance, "LocalOpenBalance");
                References(x => x.Invoice, "InvoiceId");
                References(x => x.Payment, "PaymentId");
                References(x => x.Voucher, "VoucherId");
            }
        }

--
Atilla İlhan KARTAL
Web Application & Software Architect
(Java & PHP & Registered Android Developer)
Kuşadası / Aydın / Turkey

Ricardo Peres

unread,
Jun 17, 2014, 6:51:12 AM6/17/14
to nhu...@googlegroups.com
What code are you using?

RP

Atilla İlhan KARTAL

unread,
Jun 17, 2014, 7:01:53 AM6/17/14
to nhu...@googlegroups.com
Sorry; 

public virtual void Calculate(CalculationMethod method)
        {
            if (DocumentType.Equals(DocumentType.PosProceedsVoucher))
            {
                if (Pos!=null)
                {
                    Cash = Pos.Partner;    
                }
            }

            if (method.Equals(CalculationMethod.Currency))
            {
                LocalAmount = Amount*ExchangeRate;
                AccountAmount = LocalAmount/AccountExchangeRate;
                
            }
            else if (method.Equals(CalculationMethod.LocalCurrency))
            {
                Amount = LocalAmount / ExchangeRate;
                AccountAmount = LocalAmount/AccountExchangeRate;
            }
            else if (method.Equals(CalculationMethod.AccountCurrency))
            {
                LocalAmount = AccountAmount * AccountExchangeRate;
                Amount = LocalAmount / ExchangeRate;
            }

            if (DocumentType.Equals(DocumentType.CreditCardPaymentVoucher))
            {
                Transactions.Clear();
                if (CreditCard!=null)
                {
                    Cash = CreditCard.Partner;    
                }
                var installmentAmount = Amount / Installment;
                var installmentDate = PaymentDate;
                for (int i = 0; i < Installment; i++)
                {
                    PartnerTransaction receivableTransaction = new PartnerTransaction();
                    receivableTransaction.Partner = Cash;
                    receivableTransaction.Receivable = installmentAmount;
                    receivableTransaction.LocalReceivable = installmentAmount * ExchangeRate;
                    receivableTransaction.Currency = Currency;
                    receivableTransaction.LocalCurrency = LocalCurrency;
                    //receivableTransaction.Payment = this;
                    receivableTransaction.TransactionDateTime = PaymentDate;
                    receivableTransaction.ExchangeRate = ExchangeRate;
                    receivableTransaction.Expiry = installmentDate;
                    Transactions.Add(receivableTransaction);
                    installmentDate = installmentDate.AddMonths(1);
                }

                PartnerTransaction debtTransaction = new PartnerTransaction();
                debtTransaction.Partner = Partner;
                debtTransaction.Debt = AccountAmount;
                debtTransaction.LocalDebt = LocalAmount;
                debtTransaction.Currency = AccountCurrency;
                debtTransaction.LocalCurrency = LocalCurrency;
                //debtTransaction.Payment = this;
                debtTransaction.TransactionDateTime = PaymentDate;
                debtTransaction.ExchangeRate = ExchangeRate;
                debtTransaction.Expiry = DateTime.Today;
                Transactions.Add(debtTransaction);
            }
            Save();
}


public virtual M Save()
        {
            bool isCurrentActivatedTransaction = false;
            try
            {
                
                OnBeforeSave();
                if (!Session.Transaction.IsActive)
                {
                    BeginTransaction();
                    isCurrentActivatedTransaction = true;
                }
                try
                {
                     Session.SaveOrUpdate(this);
                }
                catch (NonUniqueObjectException)
                {
                    Session.Merge(this);
                }

                if (isCurrentActivatedTransaction)
                {
                    Commit();
                }
                try
                {
                    Session.Refresh(this);
                }
                catch (Exception)
                {
                }
                OnAfterSave();
            }
            catch (Exception)
            {
                if (isCurrentActivatedTransaction)
                {
                    Rollback();
                }
                throw;
            }
            return (M)Convert.ChangeType(this, typeof(M));
        }


--
You received this message because you are subscribed to the Google Groups "nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nhusers+u...@googlegroups.com.
To post to this group, send email to nhu...@googlegroups.com.
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Atilla İlhan KARTAL

unread,
Jun 18, 2014, 7:51:36 AM6/18/14
to nhu...@googlegroups.com
Does that idea?
Reply all
Reply to author
Forward
0 new messages