Thanks Fabio and Roger!
Fabio with "second approach" I was refering to use:
session.CreateQuery("from Child c where c.Parent.Id <http://c.parent.id/><
http://c.Parent.Id <http://c.parent.id/>
> = :theParent").ExecuteUpdate();It seems to me that the documentation is correct on this link for "One Shot delete" http://knol.google.com/k/fabio-maulo/nhibernate-chapter-16-improving/1nr4enxv3dpeq/19#16(2E)5(2E)(C2)(A0)Understanding_Collection_performance But not in this one: http://www.nhforge.org/doc/nh/en/index.html#performance-collections-oneshotdelete Roger, yes that link makes all the difference! I originally didn't have the inverse setting, and all the both way mappings. I am going to try the different approaches, I think some of my problems come from those "soft-cascade with others entities", that Fabio mentioned. Thanks guys for your help so far! Regards, Dzy.- On Mon, Apr 4, 2011 at 6:49 PM, Roger Kratz <[email protected]>wrote: > Probably the last sentence isn't correct in the link I sent you (sorry for > that - didn't read it carefully enough). > > Similar docs can be found here > > http://knol.google.com/k/fabio-maulo/nhibernate-chapter-16-improving/1nr4enxv3dpeq/19#16(2E)5(2E)(C2)(A0)Understanding_Collection_performance > with a slightly different text for one shot delete, which makes more sense > I think. > > > ________________________________ > Från: [email protected] [[email protected]] för Dzyann > Leleur [[email protected]] > Skickat: den 4 april 2011 23:35 > Till: [email protected] > Ämne: Re: [nhusers] Delete Cascade taking a long time > > Hi Fabio, thanks again for your answer. > What you say comes handy, I will work that way. > > I am creating the db using Nhibernate, and everything is working fine, but > deletion, which actually works, it just takes a long time, since is not > doing one shot deletions. I am going to try using "on-delete="cascade" and > if it doesn't work well I can try the second approach you mention. > > Anyway in my previous mail, my question was not regarding this 2 methods, > because I havent tested them yet. > Was regarding using what is recomended on the documention: > 18.5.4. One shot delete > That is not very clear, it says that by clearing the collection of > elements, the items should be deleted in one shot (list.Clear()) > And it mentions: > one-shot-delete apply to collections mapped inverse="true". > > That is the first answer I got, and I tried to implement it and it didn't > work, from what Roger says, and what i could see on internet, actually > putting inverse="true" won't allow it work. So i am not sure if I am not > understanding the documentation, or maybe it is wrong. > > Regards, > > Dzy.- > > On Mon, Apr 4, 2011 at 6:21 PM, Fabio Maulo <[email protected]<mailto: > [email protected]>> wrote: > ehm... are you creating the DB using NH ? > are you validating the schema using NH ? > on-delete="cascade" works as espected but you have to check what NH think > you have in the DB with what you really have; > also you have to check the <cascade> configuration because even when you > have the ON DELETE constraint (hard cascade) the delete operation may become > "inefficient" due soft-cascade (logic cascade). > in practice... if you have on-delete="cascade" and you are 100% that the > child entity does not have any other soft-cascade with others entities, on > delete, be sure that your <cascade> value does not includes neither "delete" > nor "delete-orphans". > > btw > session.CreateQuery("from Child c where c.Parent.Id<http://c.Parent.Id> = > :theParent").ExecuteUpdate(); > do the same work you done with Ado.NET > > On Mon, Apr 4, 2011 at 5:45 PM, Dzyann Leleur <[email protected]<mailto: > [email protected]>> wrote: > Hi Roger, thanks for your answer. > > That the parent know its children so far has been relevant for the deletion > case, which is needed. Now i do Understand if you guys consider this > shouldn't be handled by Nhibernate. That is why I sent an email here. I have > all the Web Application working with Nhibernate, and when I found this > problem, the easiest solution for me was just to use ado.net< > http://ado.net>, that is why in my initial email I asked if the best would > be an approach like just do the sql sentence (ado.net<http://ado.net> or > such). > I asked help here because I wanted to try keep all the application using > Nhibernate, but if for cases like this doesn't make sense, is fine. > > I read what you said about the inverse=true, but I have certain confusion > with it. > On the link you gave me ( > http://www.nhforge.org/doc/nh/en/index.html#performance-collections-oneshotdelete) > says: > one-shot-delete apply to collections mapped inverse="true". > > Now from what I have been reading on internet this doesn't work, It > actually behaves like you say. So maybe the documentation is wrong? or i > just totally misunderstood what it says? > > Regards, > > Dzy.- > > > > On Mon, Apr 4, 2011 at 4:52 PM, Roger Kratz <[email protected] > <mailto:[email protected]>> wrote: > <<I am not going to perform operations like you put, for each item of the > collection, we are just doing queries over them.>> > > Instead of letting the parent knows thousands of children, isn't enough if > the child knows its parent? > > > Anyhow.... > > Having inverse=true means that this side doesn't own the collection. AFAIK, > this means that theCollection.Clear() won't do anything from a NH > perspective. > > Try hql delete, plain ado.net<http://ado.net> or, as already mentioned, > on-delete="cascade". > > > > ________________________________ > Från: [email protected]<mailto:[email protected]> [ > [email protected]<mailto:[email protected]>] för Dzyann > Leleur [[email protected]<mailto:[email protected]>] > Skickat: den 4 april 2011 20:04 > Till: [email protected]<mailto:[email protected]> > Ämne: Re: [nhusers] Delete Cascade taking a long time > > Hi, > The Domain, is designed as it is, is a very specific case, that doesn't > happen much. And actually, is just an applicatin to migrate data, so the > user doesn't have this problem of having such massive associations. > > I am not going to perform operations like you put, for each item of the > collection, we are just doing queries over them. > > What I want to know if the way I set the deletion was correct. > This is what i have (without the on-delete="cascade") > > <hibernate-mapping xmlns="urn:nhibernate-mapping- > 2.2" default-access="property" auto-import="true" default-cascade="none" > default-lazy="true"> > <class xmlns="urn:nhibernate-mapping-2.2" mutable="true" name="Query, > Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" > table="`Query`"> > <id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, > Culture=neutral, PublicKeyToken=b77a5c561934e089"> > <column name="Id" /> > <generator class="identity" /> > </id> > <bag cascade="all-delete-orphan" inverse="true" name="NasLocations" > mutable="true"> > <key> > <column name="Query_id" /> > </key> > <one-to-many class="NASLocation, Domain, Version=1.0.0.0, > Culture=neutral, PublicKeyToken=null" /> > </bag> > <bag cascade="all-delete-orphan" inverse="true" name="MetadataItems" > mutable="true"> > <key> > <column name="Query_id" /> > </key> > <one-to-many class="MetadataItem, Domain, Version=1.0.0.0, > Culture=neutral, PublicKeyToken=null" /> > </bag> > > Mapping for QueryMetadataItem and NasLocations relation with Query: > > <many-to-one class="Query,Domain, Version=1.0.0.0, Culture=neutral, > PublicKeyToken=null" foreign-key="Query_id" name="Query"> > <column name="Query_id" /> > </many-to-one> > > I am deleting the items as follows: > query.NasLocations.Clear(); > query.MetadataItems.Clear(); > > And then removing the Query itself. > The NasLocations items do not get deleted at all, and the MetadataItems get > delete one by one. > > I did this following the link Roger gave me. I don't see what I am doing > wrong. > > Regards, > > Dzy.- > > > On Mon, Apr 4, 2011 at 2:48 PM, Fabio Maulo <[email protected]<mailto: > [email protected]><mailto:[email protected]<mailto: > [email protected]>>> wrote: > public class Country > { > ... > ... > public IEnumerable<Person> People{get; private set;} > } > > using(var session = sf.OpenSession()) > { > var china = s.QueryOver<Country>().Where(x=> x.Name == > "China").SingleOrDefault(); > foreach(var person in china.People) > { > DoSomethingButComeBackTomorrowToSeeResult(); > } > } > > The link that Roger gave you is correct what is incorrect is the design of > the domain. > > On Mon, Apr 4, 2011 at 2:33 PM, Dzyann Leleur <[email protected]<mailto: > [email protected]><mailto:[email protected]<mailto:[email protected]>>> > wrote: > Hi Fabio, > What do you mean with that trying to map a collection that big is wrong? Do > you mean like I shouldn't use NHibernate? Or that the collection shouldn't > be that big? > The collection is being created by a service, we don't have a choice but > having that collection, there is no other way. The service is not working > with Nhibernate to create the data. We are using Nhibernate for the User > interface part, that creates queries on the data. But has the option to > delete them too. > > When I saw how Nhibernate was behaving, I thought that maybe I shouldnt try > to delete the collection with Nhibernate and just do it with SQL, but I > wanted to see different options. > I am going to try the "on-delete="cascade"", but, was the approach I > implemented following the link: > > http://www.nhforge.org/doc/nh/en/index.html#performance-collections-oneshotdelete > that Roger gave me, wrong? > > Regards, > > Dzy.- > > On Sun, Apr 3, 2011 at 10:04 PM, Fabio Maulo <[email protected]<mailto: > [email protected]><mailto:[email protected]<mailto: > [email protected]>>> wrote: > try to map a collection with 95K items is simple wrong and nothing more. > btw you can use on-delete="cascade" > > > On Fri, Apr 1, 2011 at 6:23 PM, Dzyann <[email protected]<mailto: > [email protected]><mailto:[email protected]<mailto:[email protected]>>> > wrote: > Hi, > > I have a an entity Query that has a lot of items Metadata in a > relation "one-to-many". > When I delete the Query, I want all its childs to be delete too, so I > set cascade to all-delete-orphan. > > The items get deleted, but it takes a lot of time. The query can have > many items, lets say 95k items. > I checked out with the SQL Profiler to see what was going on, and I > saw that each Metadata Item is getting deleted one by one like: > > exec sp_executesql N'DELETE FROM MyDatabase.dbo.[QueryMetadata] WHERE > Id = @p0',N'@p0 int',@p0=302401 > > This takes time, and produces a bad user experience. I would like to > hear out any recommendations. > Maybe is better if I delete the items with a sql sentence? > > Thanks in advance for your help! > > Dzy.- > > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]<mailto: > [email protected]><mailto:[email protected]<mailto: > [email protected]>>. > To unsubscribe from this group, send email to > [email protected]<mailto: > nhusers%[email protected]><mailto: > nhusers%[email protected]<mailto: > nhusers%[email protected]>>. > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > > > > > -- > Fabio Maulo > > > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]<mailto: > [email protected]><mailto:[email protected]<mailto: > [email protected]>>. > To unsubscribe from this group, send email to > [email protected]<mailto: > nhusers%[email protected]><mailto: > nhusers%[email protected]<mailto: > nhusers%[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]<mailto: > [email protected]><mailto:[email protected]<mailto: > [email protected]>>. > To unsubscribe from this group, send email to > [email protected]<mailto: > nhusers%[email protected]><mailto: > nhusers%[email protected]<mailto: > nhusers%[email protected]>>. > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > > > > -- > Fabio Maulo > > > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]<mailto: > [email protected]><mailto:[email protected]<mailto: > [email protected]>>. > To unsubscribe from this group, send email to > [email protected]<mailto: > nhusers%[email protected]><mailto: > nhusers%[email protected]<mailto: > nhusers%[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]<mailto: > [email protected]>. > To unsubscribe from this group, send email to > [email protected]<mailto: > nhusers%[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]<mailto: > [email protected]>. > To unsubscribe from this group, send email to > [email protected]<mailto: > nhusers%[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]<mailto: > [email protected]>. > To unsubscribe from this group, send email to > [email protected]<mailto: > nhusers%[email protected]>. > For more options, visit this group at > http://groups.google.com/group/nhusers?hl=en. > > > > -- > Fabio Maulo > > > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To post to this group, send email to [email protected]<mailto: > [email protected]>. > To unsubscribe from this group, send email to > [email protected]<mailto: > nhusers%[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.
