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 
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 
  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]. 

    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].
  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].
  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