Found out the issue.
I was manually setting the Id of the OrderItem entity when the POID was
guid.comb. Changed the code to no longer set the Id and all worked as
expected.

Still needed inverse="true" in child collection definition as otherwise
UPDATE statements (in the OrderItem table) were being generated.

Thanks for the help. NHibernate can work with event sourcing!

Billy Stack

On Sun, Feb 6, 2011 at 3:26 PM, Richard Brown (gmail) <
[email protected]> wrote:

>   That should be fairly straightforward to do.  I’d need to see your
> mappings and code to see what’s wrong in this case, but I suspect it’ll be
> that you want to use inverse=”true” on the collection (if you’re setting the
> back-pointer from the child to the parent yourself).
>
>   *From:* Billy Stack <[email protected]>
> *Sent:* Sunday, February 06, 2011 1:51 PM
> *To:* [email protected]
> *Subject:* Re: [nhusers] Re: [NH users] Re: When using id generator
> class="assigned", why does extra select take place
>    Hi Richard,
>
> Thanks for the information.
> I am now using guid.comb as the POID strategy. Our database is just simply
> storing events.
> This generates just an insert only when using a simple entity - which is
> what we want.
>
> However I cant get it to work for complex types e.g an order with many
> order items.
> Is the following scenario possible?
>
> Parent entity where POID = guid.comb
> Child entity where POID = guid.comb
> Note: One Parent has many children.
>
> When I attempt to do a save I get an exception:
>
> NHibernate: INSERT INTO MoreComplexMapping_Order (CustomerId, Description,
> Id) VALUES (@p0, @p1, @p2);@p0 = 1, @p1 = 'My new order', @p2 =
> dbe893b4-fa1c-4779-8f48-9e8200e36eb1
> NHibernate: UPDATE MoreComplexMapping_OrderItem SET OrderId = @p0,
> Description = @p1 WHERE Id = @p2;@p0 = NULL, @p1 = 'desc 1', @p2 =
> 946475f6-f670-4a5b-945a-e033836ff002
> 13:48:03,560 ERROR [   7] AbstractFlushingEventListener [(null)]- Could not
> synchronize database state with session
>
> It seems to attempt to do an update when I want it to do an insert.
>
> Regards,
> Billy Stack
>
>
>
>
> On Sun, Feb 6, 2011 at 10:17 AM, Richard Brown (gmail) <
> [email protected]> wrote:
>
>>   Hi Billy,
>>
>> The warning occurs when you call SaveOrUpdate() on an entity with an
>> 'assigned' identifier.
>>
>> When NH doesn't control the IDs, it can't tell if that instance should be
>> saved (it's new), or updated (it already exists in the DB), so it warns you
>> to let you know it's hitting the DB (twice) when you might not have expected
>> it to.
>>
>> The fix that caused this behaviour:
>> http://216.121.112.228/browse/NH-1914
>> The discussion on what it should do:
>> http://groups.google.com/group/nhibernate-development/browse_thread/thread/d10873bbc7ca917c/d608c5512a224288?lnk=gst&q=1914#d608c5512a224288
>>
>> Regards,
>>     Richard
>>
>>
>>   *From:* Billy Stack <[email protected]>
>> *Sent:* Sunday, February 06, 2011 9:29 AM
>> *To:* [email protected]
>> *Subject:* Re: [nhusers] Re: When using id generator class="assigned",
>> why does extra select take place
>>    The Id for the entity we were generating was a comb guid. Rather than
>> the code setting this we just changed the id generator to "guid.comb". No
>> select is performed by NHibernate by default when we perform a save.
>>
>> Thanks for the help
>> Billy Stack
>>
>>   On Sat, Feb 5, 2011 at 3:10 PM, Jason Meckley 
>> <[email protected]>wrote:
>>
>>>  this worked in my situation, but the entities I was saving where
>>> children of a parent entity that was resolved from session. so the context
>>> is slightly different. In your situation it sounds like the entity with the
>>> assigned id is the root.
>>>
>>> You know it's an insert only model, but NH doesn't know that, so it needs
>>> to check if it exists. There may be a mapping/configuration setting that
>>> prevents load before save, or prevents updates, but I not 100% sure about
>>> that.
>>>
>>> If that doesn't work (or exist) I would change the POID strategy to allow
>>> NH/DB to handle it. If the assigned ID has business meaning, then map this
>>> as an immutable attribute of the entity.
>>>
>>> Another option is to drop the use of NH altogether. I haven't used event
>>> sourcing myself, but what little I understand it suppose to simplify
>>> persistence concerns. If that's the case then NH or an RDBMS wouldn't be
>>> required.
>>>
>>> --
>>> 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
>>> mailto:nhusers%[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
>> mailto:nhusers%[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
>> mailto:nhusers%[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.
>
> --
> 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.

Reply via email to