Try these for understanding generators, especially the problem with
post-insert generators (IDENTITY):

http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html
http://nhforge.org/blogs/nhibernate/archive/2009/03/20/nhibernate-poid-generators-revealed.aspx

-Markus

2011/2/10 Ryan Aimel Estandarte <[email protected]>:
> Hi Markus,
> Thanks for the reply. I will try your suggestion. However I want to ask the
> purpose of "hilo". From what I know, "native" gets the seeding of SQL, thus
> getting their identity seed (if this is what I understand).
> Ryan. :)
> On Thu, Feb 10, 2011 at 1:35 PM, Markus Zywitza <[email protected]>
> wrote:
>>
>> Cascading and native generators are a bad team...
>>
>> Without even knowing the exception's type it's only educated guessing,
>> but try replacing native with hilo and look whether that helps.
>>
>> Or save the Adress objects first, I guess this cascade runs into the
>> error.
>>
>> -Markus
>>
>> 2011/2/8 Ryan Aimel Estandarte <[email protected]>:
>> > Guys, I need help on this. I can't seem to find any solution to this.
>> > I'm trying to insert records to 3 classes/tables. However, the error
>> > occurred when the records are about to be inserted.
>> > I'm on a complete dead-end on this case. Below are the classes and the
>> > mapping files
>> > static void Main(string[] args)
>> >         {
>> >             Configuration cfg = new Configuration();
>> >
>> >
>> >  cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionProvider,
>> >                 typeof(NHibernate.Connection.DriverConnectionProvider)
>> >                 .AssemblyQualifiedName);
>> >             cfg.Properties.Add(NHibernate.Cfg.Environment.Dialect,
>> >                 typeof(NHibernate.Dialect.MsSql2008Dialect)
>> >                 .AssemblyQualifiedName);
>> >
>> >  cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionDriver,
>> >                 typeof(NHibernate.Driver.SqlClientDriver)
>> >                 .AssemblyQualifiedName);
>> >
>> >  cfg.Properties.Add(NHibernate.Cfg.Environment.ConnectionString,
>> >                 @"Data Source=DBW-BSG-N87\sqlexpress;Initial
>> > Catalog=NHibernateDB;Integrated Security=True");
>> >
>> >
>> >  cfg.Properties.Add(NHibernate.Cfg.Environment.ProxyFactoryFactoryClass,
>> >
>> >
>> >  typeof(NHibernate.ByteCode.Castle.ProxyFactoryFactory).AssemblyQualifiedName);
>> >             cfg.AddAssembly(typeof(Address).Assembly);
>> >             //Create Session Factory
>> >             ISessionFactory sessionFactory = cfg.BuildSessionFactory();
>> >             //Create Session and Transaction
>> >             ISession session = sessionFactory.OpenSession();
>> >             ITransaction tx = session.BeginTransaction();
>> >             //Insert records
>> >             //Contact contact = new Contact("Brando", "Washington",
>> > "[email protected]");
>> >             //session.Save(contact);
>> >             //tx.Commit();
>> >             Contact ordCntct = new Contact("Martha", "Washington",
>> > "[email protected]");
>> >             Address ordAddr = new Address("1600 Pennsylvania Ave, NW",
>> > null,
>> > "Washington, DC", "20500");
>> >             ordAddr.AddressContact = ordCntct;
>> >             ordCntct.ContactAddress = new List<Address>();
>> >             ordCntct.ContactAddress.Add(ordAddr);
>> >             OrderHeader header = new OrderHeader();
>> >             header.Number = "0000001";
>> >             header.OrderDate = DateTime.Now;
>> >             header.BillToContact = ordCntct;
>> >             header.BillToAddress = ordAddr;
>> >             header.ShipToContact = ordCntct;
>> >             header.ShipToAddress = ordAddr;
>> >             //OrderHeader header = new OrderHeader("00001",
>> > DateTime.Now,
>> > -1, -1, ordCntct, ordCntct, ordAddr, ordAddr);
>> >             session.SaveOrUpdate(header);
>> >             tx.Commit();
>> >         }
>> > using System;
>> > using System.Collections.Generic;
>> > using System.Linq;
>> > using System.Text;
>> > namespace Ordering.Data
>> > {
>> >     public class Contact
>> >     {
>> >         #region Properties
>> >         private int _ID;
>> >         private string _lastName;
>> >         private string _firstName;
>> >         private string _email;
>> >         private IList<Phone> _contactPhone;
>> >         private IList<Address> _contactAddress;
>> >         private IList<OrderHeader> _billToContacts;
>> >         private IList<OrderHeader> _shipToContacts;
>> >         public virtual IList<OrderHeader> ShipToContacts
>> >         {
>> >             get { return _shipToContacts; }
>> >             set { _shipToContacts = value; }
>> >         }
>> >         public virtual IList<OrderHeader> BillToContacts
>> >         {
>> >             get { return _billToContacts; }
>> >             set { _billToContacts = value; }
>> >         }
>> >         public virtual IList<Address> ContactAddress
>> >         {
>> >             get { return _contactAddress; }
>> >             set { _contactAddress = value; }
>> >         }
>> >         public virtual IList<Phone> ContactPhone
>> >         {
>> >             get { return _contactPhone; }
>> >             set { _contactPhone = value; }
>> >         }
>> >         public virtual string Email
>> >         {
>> >             get { return _email; }
>> >             set { _email = value; }
>> >         }
>> >         public virtual string FirstName
>> >         {
>> >             get { return _firstName; }
>> >             set { _firstName = value; }
>> >         }
>> >         public virtual string LastName
>> >         {
>> >             get { return _lastName; }
>> >             set { _lastName = value; }
>> >         }
>> >         public virtual int ID
>> >         {
>> >             get { return _ID; }
>> >             set { _ID = value; }
>> >         }
>> >         #endregion
>> >         #region Constructor
>> >         public Contact()
>> >         { }
>> >         public Contact(string lastName, string firstName, string email)
>> >         {
>> >             this.LastName = lastName;
>> >             this.FirstName = firstName;
>> >             this.Email = email;
>> >         }
>> >         #endregion
>> >     }
>> > }
>> > using System;
>> > using System.Collections.Generic;
>> > using System.Linq;
>> > using System.Text;
>> > namespace Ordering.Data
>> > {
>> >     public class Address
>> >     {
>> >         #region Attributes and Properties
>> >         private int _ID;
>> >         private string _address1;
>> >         private string _address2;
>> >         private string _city;
>> >         private string _zipCode;
>> >         private Contact _addressContact;
>> >         private IList<OrderHeader> billToAddress;
>> >         private IList<OrderHeader> shipToAddress;
>> >         public virtual IList<OrderHeader> ShipToAddress
>> >         {
>> >             get { return shipToAddress; }
>> >             set { shipToAddress = value; }
>> >         }
>> >         public virtual IList<OrderHeader> BillToAddress
>> >         {
>> >             get { return billToAddress; }
>> >             set { billToAddress = value; }
>> >         }
>> >         public virtual Contact AddressContact
>> >         {
>> >             get { return _addressContact; }
>> >             set { _addressContact = value; }
>> >         }
>> >         public virtual string ZipCode
>> >         {
>> >             get { return _zipCode; }
>> >             set { _zipCode = value; }
>> >         }
>> >         public virtual string City
>> >         {
>> >             get { return _city; }
>> >             set { _city = value; }
>> >         }
>> >         public virtual string Address2
>> >         {
>> >             get { return _address2; }
>> >             set { _address2 = value; }
>> >         }
>> >         public virtual string Address1
>> >         {
>> >             get { return _address1; }
>> >             set { _address1 = value; }
>> >         }
>> >
>> >         public virtual int ID
>> >         {
>> >             get { return _ID; }
>> >             set { _ID = value; }
>> >         }
>> >         #endregion
>> >
>> >         #region Constructors
>> >         public Address()
>> >         { }
>> >         /// <summary>
>> >         ///
>> >         /// </summary>
>> >         /// <param name="address1"></param>
>> >         /// <param name="address2"></param>
>> >         /// <param name="city"></param>
>> >         /// <param name="zipCode"></param>
>> >         public Address(string address1,
>> >             string address2,
>> >             string city,
>> >             string zipCode)
>> >             : this()
>> >         {
>> >             this.Address1 = address1;
>> >             this.Address2 = address2;
>> >             this.City = city;
>> >             this.ZipCode = zipCode;
>> >         }
>> >         #endregion
>> >     }
>> > }
>> > using System;
>> > using System.Collections.Generic;
>> > using System.Linq;
>> > using System.Text;
>> > namespace Ordering.Data
>> > {
>> >     public class OrderHeader
>> >     {
>> >         #region Properties and Attributes
>> >         private int _ID;
>> >         private string _number;
>> >         private DateTime _orderDate;
>> >         private int _itemQty;
>> >         private decimal _total;
>> >         private Contact _billToContact;
>> >         private Contact _shipToContact;
>> >         private Address _billToAddress;
>> >         private Address _shipToAddress;
>> >         private IList<OrderItem> _headerItems;
>> >         public virtual IList<OrderItem> HeaderItems
>> >         {
>> >             get { return _headerItems; }
>> >             set { _headerItems = value; }
>> >         }
>> >
>> >         public virtual DateTime OrderDate
>> >         {
>> >             get { return _orderDate; }
>> >             set { _orderDate = value; }
>> >         }
>> >
>> >         public virtual Address ShipToAddress
>> >         {
>> >             get { return _shipToAddress; }
>> >             set { _shipToAddress = value; }
>> >         }
>> >         public virtual Address BillToAddress
>> >         {
>> >             get { return _billToAddress; }
>> >             set { _billToAddress = value; }
>> >         }
>> >         public virtual Contact ShipToContact
>> >         {
>> >             get { return _shipToContact; }
>> >             set { _shipToContact = value; }
>> >         }
>> >         public virtual Contact BillToContact
>> >         {
>> >             get { return _billToContact; }
>> >             set { _billToContact = value; }
>> >         }
>> >         public virtual decimal Total
>> >         {
>> >             get { return _total; }
>> >             set { _total = value; }
>> >         }
>> >         public virtual int ItemQty
>> >         {
>> >             get { return _itemQty; }
>> >             set { _itemQty = value; }
>> >         }
>> >         public virtual string Number
>> >         {
>> >             get { return _number; }
>> >             set { _number = value; }
>> >         }
>> >         public virtual int ID
>> >         {
>> >             get { return _ID; }
>> >             set { _ID = value; }
>> >         }
>> >         #endregion
>> >         #region Constructors
>> >         public OrderHeader()
>> >         { }
>> >         public OrderHeader(string number, DateTime orderDate, int
>> > itemQty,
>> > decimal total,
>> >                             Contact billToContact, Contact
>> > shipToContact,
>> >                             Address billToAddress,
>> >                             Address shipToAddress)
>> >         {
>> >             this.Number = number;
>> >             this.OrderDate = orderDate;
>> >             this.ItemQty = itemQty;
>> >             this.Total = total;
>> >             this.BillToContact = billToContact;
>> >             this.ShipToContact = shipToContact;
>> >             this.BillToAddress = billToAddress;
>> >             this.ShipToAddress = shipToAddress;
>> >         }
>> >         #endregion
>> >     }
>> > }
>> > (Filename: Contact.hbm.xml)
>> > <?xml version="1.0" encoding="utf-8" ?>
>> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>> >                    namespace="Ordering.Data"
>> >                    assembly="Ordering.Data">
>> >   <class name="Ordering.Data.Contact, Ordering.Data"
>> >          table="Contact">
>> >     <id name="ID">
>> >       <column name="ID" sql-type="int"/>
>> >       <generator class="native"/>
>> >     </id>
>> >     <property name="LastName" type="String"/>
>> >     <property name="FirstName" type="String"/>
>> >     <property name="Email" type="String"/>
>> >
>> >     <!--Many to Many Relationship-->
>> >
>> >
>> >     <!--One to Many Relationship-->
>> >     <bag name="BillToContacts" inverse="true"
>> >          lazy="true" cascade="all-delete-orphan">
>> >       <key column="BillToContact_ID"/>
>> >       <one-to-many class="OrderHeader"/>
>> >     </bag>
>> >     <bag name="ShipToContacts" inverse="true"
>> >          lazy="true" cascade="all-delete-orphan">
>> >       <key column="ShipToContact_ID"/>
>> >       <one-to-many class="OrderHeader"/>
>> >     </bag>
>> >     <bag name="ContactAddress" inverse="true"
>> >              lazy="true" cascade="all-delete-orphan">
>> >       <key column="Contact_ID"/>
>> >       <one-to-many class="Address"/>
>> >     </bag>
>> >     <bag name="ContactPhone" table="Contact_Phone" inverse="false"
>> >          lazy="true" cascade="none">
>> >       <key>
>> >         <column name="Contact_ID" length="4" sql-type="Int32"
>> > not-null="true"/>
>> >       </key>
>> >
>> >       <many-to-many class="Phone">
>> >         <column name="Phone_ID" length="4" sql-type="Int32"
>> > not-null="true"/>
>> >       </many-to-many>
>> >     </bag>
>> >   </class>
>> > </hibernate-mapping>
>> > (Filename: Address.hbm.xml)
>> > <?xml version="1.0" encoding="utf-8" ?>
>> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>> >                    namespace="Ordering.Data"
>> >                    assembly="Ordering.Data">
>> >   <class name="Ordering.Data.Address, Ordering.Data"
>> >          table="Address">
>> >     <id name="ID">
>> >       <column name="ID" sql-type="Int32"/>
>> >       <generator class="native"/>
>> >     </id>
>> >     <property name="Address1" type="String" not-null="true"/>
>> >     <property name="Address2" type="String" not-null="false"/>
>> >     <property name="City" type="String" not-null="true"/>
>> >     <property name="ZipCode" type="String" not-null="false"/>
>> >     <!--Many to One relationship-->
>> >     <many-to-one name="AddressContact" class="Contact">
>> >       <column name="Contact_ID" length="4" sql-type="Int32"/>
>> >     </many-to-one>
>> >
>> >     <!--One to Many relationship-->
>> >     <bag name="BillToAddress" inverse="true"
>> >          lazy="true" cascade="all-delete-orphan">
>> >       <key column="BillToAddress_ID"/>
>> >       <one-to-many class="Address"/>
>> >     </bag>
>> >     <bag name="ShipToAddress" inverse="true"
>> >          lazy="true" cascade="all-delete-orphan">
>> >       <key column="ShipToAddress_ID"/>
>> >       <one-to-many class="Address"/>
>> >     </bag>
>> >   </class>
>> > </hibernate-mapping>
>> > (Filename: OrderHeader.hbm.xml)
>> > <?xml version="1.0" encoding="utf-8" ?>
>> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>> >                    namespace="Ordering.Data"
>> >                    assembly="Ordering.Data">
>> >   <class name="Ordering.Data.OrderHeader, Ordering.Data"
>> >          table="OrderHeader">
>> >     <id name="ID">
>> >       <column name="ID" sql-type="Int32"/>
>> >       <generator class="native"/>
>> >     </id>
>> >     <property name="Number" type="String"/>
>> >     <property name="OrderDate" type="DateTime"/>
>> >     <property name="ItemQty" type="Int32"/>
>> >     <property name="Total" type="Decimal"/>
>> >     <!--Many to One relationship-->
>> >     <many-to-one name="BillToContact" class="Contact">
>> >       <column name="BillToContact_ID" length="4" sql-type="Int32"/>
>> >     </many-to-one>
>> >     <many-to-one name="ShipToContact" class="Contact">
>> >       <column name="ShipToContact_ID" length="4" sql-type="Int32"/>
>> >     </many-to-one>
>> >     <many-to-one name="BillToAddress" class="Contact">
>> >       <column name="BillToAddress_ID" length="4" sql-type="Int32"/>
>> >     </many-to-one>
>> >     <many-to-one name="ShipToAddress" class="Contact">
>> >       <column name="ShipToAddress_ID" length="4" sql-type="Int32"/>
>> >     </many-to-one>
>> >     <!--One to Many relationship-->
>> >     <bag name="HeaderItems" inverse="true"
>> >          lazy="true" cascade="all-delete-orphan">
>> >       <key column="OrderHeader_ID"/>
>> >       <one-to-many class="OrderItem"/>
>> >     </bag>
>> >
>> >   </class>
>> > </hibernate-mapping>
>> > Please help me. I'm really at a dead end on this.
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups
>> > "nhusers" group.
>> > 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.
>> >
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "nhusers" group.
>> 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.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> 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.
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
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