Thank you for your answer. I've added this property in the class and the mapping file and its corresponding field in the table, but I still get this error when deleting an item: could not delete collection rows: [DeliveryDays.Shipping.Days#france_by_tnt_express][SQL: UPDATE delivery_days SET shipping_method = null WHERE shipping_method = ?p0 AND shipping_method = ?p1 AND Day = ?p2]" Should I use unsaved-value="any" ?Should I use cascade="all" ? I'm saving using session.Flush() (not SaveOrUpdate) because I want to save all my entities. This is very strange because the SQL sent is an UPDATE and not a DELETE... Am I doing something wrong ?
Best regards, mathmax On 11 oct, 17:55, Anne Epstein <[email protected]> wrote: > Composite keys are finicky. One key annoyance with them is that unless you > givroperly.e them a little help, composite-key entities can't properly use > SaveOrUpdate, and can't be used with cascading properly. > > Two fixes. you can implement an IInterceptor, or you can add a <version> > property. I haven't done the first, but I can say from experience the > second is simple enough. Just a few things you need to do: > > 1) add a property to your class-just like any of your other properties in > your class... unless you do choose to use access="field..." in this case, > let's name your property LastModifiedOn. this new field is for NHibernate, > not for you, so you can look, but don't mess with it yourself. (you may > want to use access="field...." option so you man map directly to the private > field and you don't have to expose this outside your class-you'll need to go > to the NH docs and pick your naming strategy)- > > 2) add property to your mapping: > <version name="LastModifiedOn" type="timestamp" column="LastModifiedOn" > /> > > 3) Don't forget to add the new field to the table! Note that if you add a > version column to an existing table, you're going to have to prepopulate the > existing rows for your your new column with an initial datetime or you'll > get errors-any date at all, so long as it's in the past. 1/1/2009 12:00:00 > is as good a value as any.... > > On Sun, Oct 11, 2009 at 1:45 AM, mathmax <[email protected]>wrote: > > > > > Hello, > > > I try to delete an item of a collection inside a transaction. When I > > flush the session I get this error because the class of the child > > items is mapped with a composite Id. > > > the mapping file look like this: > > > <class name="Shipping" table="shipping_methods" lazy="false"> > > <id name="Id" column="id"> > > <generator class="assigned" /> > > </id> > > ... > > <bag name="Days" table="delivery_days" lazy="false" cascade="all- > > delete-orphan"> > > <key column="shipping_method"/> > > <one-to-many class="DeliveryDay" /> > > </bag> > > > </class> > > > <class name="DeliveryDay" table="delivery_days" lazy="false"> > > <!--http://journalofasoftwaredev.wordpress.com/2008/04/19/ > > nhibernate-exception-unexpected-row-count-0-expected-1/--<http://journalofasoftwaredev.wordpress.com/2008/04/19/%0Anhibernate-e...> > > > <composite-id unsaved-value="any"> > > <key-property name="ShippingMethod" column="shipping_method" /> > > <key-property name="Day" /> > > </composite-id> > > ... > > </class> > > > I try with and without unsaved-value="any" on the composite-id tag > > cascade="all-delete-orphan", cascade="all" and no cascade attribute on > > the bag tag. > > But I always get an error. > > Depending on the cascade and unsaved-value attribute I get different > > error messages. > > With this mapping file I get this error : {"Unexpected row count: 0; > > expected: 1"} > > and it seems that the SQL sent to the database is an UPDATE statement > > instead of a DELETE statement... very strange. > > I also get sometimes this error when I try to add more than on item to > > the collection : {"a different object with the same identifier value > > was already associated with the session: DeliveryDays.DeliveryDay, of > > entity: DeliveryDays.DeliveryDay"} > > > Does anyone know what I am doing wrong with composite-key ? > > > regards, > > > mathmax --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
