I currently have the problem that NHibernate creates an insert
statement for new items in a collection of a persistent entity when
calling session.IsDirty().

My configuration:
* NHibernate 3.0.0.Alpha3
* An entity "Parent" with a collection of "Child" entities. One-to-
many side is mapped as set, inverse, lazy and cascade all-delete-
orphan. Many-to-one side is mapped as lazy.
* All IDs are using the sequence generator.
* Optimistic lock is by version column.
* Session.FlushMode is Never.

My use-case:
1. Persistent Parent (already containing some Child entities) is
loaded.
2. A new Child is added to the collection.
3. session.IsDirty() is called (UI checks, if it should enable the
save button).
4. NHibernate executes a select statement for the ID of the new Child
and queues an insert statement for the Child using its current
(default) values. (Problem starts here: Why is it needed to get the ID
of the new Child and queue an insert statement?)
4a. (Optional step) Some more new Childs are added. No more select
statements are executed or insert statements are queued when calling
session.IsDirty() because IsDirty() returns early because it knows it
already has queued statements (very inconsistent behaviour in my
opinion!)
5. User has to change a property of the Child to get rid of UI
validation errors (a property is not allowed to be empty, but is by
default to force the user to input something meaningful).
6. User saves the changes, session.Flush() is called.

Now NHibernate does the following:
1. Select statements for the new IDs of additional Childs from step 4a
are executed.
2. The queued insert statement for the first new Child is executed.
This statement uses the default values of the class and fails with an
not null constraint error.
3. (If I disable the not null check in the DB) Parent version column
is updated.
4. Additional childs from step 4a are inserted (with the already
changed properties, so these statements are ok).
5. The first new Child is updated with the changed property.


I found the following Jira issue which already describes the problem,
but it was rejected because it's "Expected behavior using identity":
http://216.121.112.228/browse/NH-2136
But I'm using sequence, not identity, and still have the same problem.

Does anyone know if this is a bug at my side, a bug in NHibernate or
just "by design" like for identiy IDs?

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to nhus...@googlegroups.com.
To unsubscribe from this group, send email to 
nhusers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to