Thank you so much. Well I read some articles were they warned to use flushmode never, but I think this is the solution. I git these modes available always, auto, commit, never, unspecified. what about "unspecified"? Is there a way to set the flushmode in tne hibernate.cfg.xml? (I do not like to put it in the code since my sessionProvider is used in other projects as well and they use auto ...)
Thanks for your help antoschka On 10 Feb., 21:13, Fabio Maulo <[email protected]> wrote: > In lines..... > > 2009/2/10 antoschka <[email protected]> > > > > > > > Hi, > > > thanks for your help. Actually the entities mentioned are about five > > relation apart from each other, but I could narrow it down to a simple > > relation > > Class1 > > { > > int Id; > > Class2 ForeignClass; > > } > > mapping file > > <class name="Class1" table="Class1" lazy="false"> > > <id name="Id" column="Id" type="int"> > > <generator class="increment" /> > > </id> > > <many-to-one name="Class2" cascade="none" column="Class2" not- > > null="true" /> > > </class> > > > Class2 > > { > > int Id; > > IList<Class1> ForeignClass1Collection; > > } > > mapping file > > <class name="Class2" table="Class2" lazy="false"> > > <id name="Id" column="Id" type="int"> > > <generator class="increment" /> > > </id> > > <bag name="ForeignClass1Collection" inverse="true" lazy="true" > > cascade="all"> > > <key column="Class2" /> > > <one-to-many class="Class1" /> > > </bag> > > </class> > > > now I create a transient object of class1 and add it to the > > ForeignClass1Collection in Class2 > > Class2 persistentClass2 = session.Get<Class2>(class2Id); > > Class1 class1 = new Class1(0, persistentClass2); > > persistentClass2.ForeignClass1Collection.Add(class1) > > here you are associating the class1 to the persistent class2; the class2 is > dirty and so the session is dirty. > > > > > thats about the standard way how I work with my entities. > > class1 is transient and not yet saved. When I do now the following I > > run into trouble (class1 is automatically persisted): > > trans = session.BeginTransaction(); > > ICriteria query = session.CreateCriteria(typeof(Class2)); > > You are working in the same dirty-session and you are using AuoFlush. NH > discover that you are doing a query in the same "plan" of a dirty > persistent-entity so, to ensure the result of the query, NH run the Flush > before continue. > > > > > items = query.List<T>(); > > trans.Commit(); > > > thinking about your comments, fabio, I first thought it would be > > enough to set the mapping in Class2 to: > > ... > > <bag name="ForeignClass1Collection" inverse="true" lazy="true" > > cascade="save-update"> > > ... > > but same symptoms > > setting it to: > > ... > > <bag name="ForeignClass1Collection" inverse="true" lazy="true" > > cascade="none"> > > ... > > will cause an exception: > > NHibernate.PropertyValueException - Message="not-null property > > references a null or transient ... > > > What are the possible options to solve the problem? > > I would say the use of FlushMode.Commit but you are using a transaction to > do something else so... FlushMode.Commit can't work. > You must work using FlushMode.Never that mean that you must explicit call > the flush when you really need it. > -- > 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] 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 -~----------~----~----~----~------~----~------~--~---
