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.

Reply via email to