No I mean saveOrUpdate
Think about how saveOrUpdate works in your case, and you will see that
merge is very consistent.
Josh Moore wrote:
Emmanuel, do you mean saveOrUpdateCopy? Since saveOrUpdate doesn't do
any copying of the values onto another instance.
By the way, the "dirtying" of the non-updatable field I described also
holds for collections. This means that DefaultMergeEventListener does
a source.load(), gets a fully valid object with proxied collections
(which would later be lazy-loadable with the current values), copies
_invalid_ values on top of the clean proxied collection, and sends
that back to the user.
Seems counter-productive.
Thanks,
Josh.
Emmanuel Bernard wrote:
This is consistent with the way saveOrUpdate works
Josh Moore wrote:
Using Hibernate with non-updatable fields can leave entities in a
confused state.
Take an Image with a field creationEvent, not updatable. If
Image.creationEvent is set on an instance and passed to
session.merge(),
then:
(1) Properly, no UPDATE is issued.
(2) DefaultMergeEventListener.copyValues copies the invalid
creationEvent to the new instance
(3) The client who receives that instance thinks creationEvent has been
successfully updated.
What are the semantics here? Should the spec specify this? Max, you
mentioned via irc that this wasn't in the spec, but I assume
@Column( updatable = false )
would cause the same issue.
Currently I'm writing logic in my MergeEventListener to NOT copy these
values (difficult because of the EmbeddedComponentTypes I'm using). It
seems, however, that this should be belong directly to
DefaultMergeEventListener.
Opinions?
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev