I think you can use idbag to improve that, take care because the database schema is different (the intermediate table has a surrogate PK) .. but you STILL have a problem with your session management. You will hit a lot of problems like this one if you don't fix the session scope issue.
2010/9/23 Allan Fagner <[email protected]> > @Jose, @Jsaon > > Thanks for your response. I'm using a module to open and close the session > and the transaction is not yet committed when the exception is raised. I'm > willing to use bag, I'm ok with that. My question was about the deletion and > insertion of the intermediate table (all records are deleted and then > reinserted). Is there a way to workaround that using bag? > > Thanks. > > -- > Allan Ferreira > .NET Software Architect > .NET Senior Consultant > > M: +55-31-91459275 > E: [email protected] > > > On Wed, Sep 22, 2010 at 6:51 PM, Jason Dentler <[email protected]>wrote: > >> Your set is lazily loaded. In order to ensure no duplicates are added (the >> only reason for using a set), the collection must be initialized. If the >> session is closed when this happens, you get the exception. >> >> So, it's a matter of session management or domain design. If you don't >> need to enforce uniqueness on the collection, you should switch to bag. >> >> If you need the unique guarantee, then stay with set, but be sure the >> session is still open when you initialize the collection. (and beware of >> Select N+1 issues) >> >> - Jason >> >> >> On Wed, Sep 22, 2010 at 2:32 PM, José F. Romaniello < >> [email protected]> wrote: >> >>> you have a problem with your session management/scope >>> >>> 2010/9/22 Allan Fagner <[email protected]> >>> >>> Fabio, >>>> >>>> I have tried that already. It solves the problem related to the queries. >>>> But it creates another, when loading a Catalog with no Product associated >>>> to >>>> it an exception is raised: >>>> >>>> "Initializing[Unavailable#]-failed to lazily initialize a collection, no >>>> session or session was closed" >>>> >>>> That's why kept the bag. If there's a way to workaround that, <set/> >>>> will fit. >>>> >>>> Thanks. >>>> -- >>>> Allan Ferreira >>>> M: +55-31-91459275 >>>> E: [email protected] >>>> >>>> >>>> On Wed, Sep 22, 2010 at 12:43 PM, Fabio Maulo <[email protected]>wrote: >>>> >>>>> What happen to the table and to the queries if you use <set> instead >>>>> <bag> ? >>>>> >>>>> On Wed, Sep 22, 2010 at 11:19 AM, Allan Fagner >>>>> <[email protected]>wrote: >>>>> >>>>>> Hi people, >>>>>> >>>>>> I've been using NHibernate for awhile and now I'm facing a problem >>>>>> which I didn't find an answer so far. >>>>>> >>>>>> The thing is, I have a many-to-many relationship. Everything is >>>>>> working the way they suppose to (insert, update, delete and search). The >>>>>> only thing bugging me is that every time I update the list of Products >>>>>> (insert and/or delete) and save the Catalog, all records in the >>>>>> intermediate >>>>>> table (CatalogProduct) get deleted and then (re)inserted. For example: >>>>>> let's >>>>>> say I have a Catalog and this catalog is associated with three Products >>>>>> (1,2 >>>>>> and 3). If I add a fourth Product to the Catalog the three products >>>>>> already >>>>>> there are deleted from CatalogProduct table and the four products (1,2,3 >>>>>> and >>>>>> 4) are then inserted. >>>>>> >>>>>> Here are the mappings: >>>>>> >>>>>> <class name="Catalog" table="Catalog" lazy="true"> >>>>>> >>>>>> >>>>>> <id column="Id" name="Id" access="field.camelcase" type="Int32" >>>>>> unsaved-value="0"> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <generator class="identity"/> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> </id> >>>>>> >>>>>> <property column="Name" access="property" type="String" name="Name" >>>>>> not-null="true" length="250" /> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <property column="Code" access="property" type="Int32" name="Code" >>>>>> not-null="true" /> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <property column="Description" access="property" type="String" >>>>>> name="Description" not-null="true" length="250" /> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <bag name="products" table="CatalogProduct" lazy="true" >>>>>> access="field" generic="true" cascade="save-update" inverse="false"> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <key column="IdCatalog"></key> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <many-to-many class="Product" column="IdProduct"></many-to-many> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> </bag> >>>>>> >>>>>> </class> >>>>>> >>>>>> <class name="Product" table="Product" lazy="true"> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <id column="Id" name="Id" access="field.camelcase" type="Int32" >>>>>> unsaved-value="0"> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <generator class="identity"/> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> </id> >>>>>> >>>>>> <property column="Sku" access="property" type="String" name="Sku" >>>>>> not-null="true" length="250" /> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <property column="Description" access="property" type="String" >>>>>> name="Description" not-null="true" length="250" /> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <property column="ImageUrl" access="property" type="String" >>>>>> name="ImageUrl" not-null="true" length="250" /> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> <property column="Quantity" access="property" type="Int32" >>>>>> name="Quantity" not-null="true" /> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> </class> >>>>>> >>>>>> >>>>>> This is not a problem for the client as the system is working as it >>>>>> should. But, it is bugging me. :) >>>>>> >>>>>> Any thoughts on how to solve that??? >>>>>> >>>>>> Thanks >>>>>> -- >>>>>> Allan Ferreira >>>>>> M: +55-31-91459275 >>>>>> E: [email protected] >>>>>> >>>>>> -- >>>>>> 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]<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]. >>>>> To unsubscribe from this group, send email to >>>>> [email protected]<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]<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]<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]<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]<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.
