Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] merge() cascading by default?

Hi James,

I am merging a new object where all its attributes are new, however when it
goes to merge() the entity to disk I know for a fact the specification
attribute already exists (which is why you see the insertion failure). I
understand what you said about merging an instance and skipping any
non-cascade attributes but I would expect the following operation to fail:

1) The entity being merged is new
2) One of the attributes points to a new entity but does not have cascade

because clearly then you're trying to persist an incomplete object. The
counter-example is if you're merging an existing entity. I agree that in
such a case it should skip merging any attribute with cascade disabled (so
long as the attribute is already persisted, if the attribute is new then I
expect a failure).

Please confirm whether you agree with the above statements or which ones I
have misunderstood. As for my specific use-case, I have class Image with
attribute Specification (which you see getting inserted). The attribute is
declared with the following annotations:

	@ManyToOne(optional = false, fetch = FetchType.LAZY)
	@JoinColumn(name = "specificationId")


James Sutherland wrote:
> I think this is correct.
> merge() and persist() are different operations.  Merge is merging from one
> detached copy of the object, into a managed object, if something is not
> cascade merge, it just doesn't need to merge that attribute.  For persist
> the new object is being made managed (itself, not a copy), so has to
> resolve all of its references.
> However, I would expect the relation to just not be merged, not to be
> inserted.  Is the object you are merging new or existing?  How are the new
> object relations that are inserted mapped?  Perhaps include some example
> code.
> cowwoc wrote:
>> Here is the output I see with logging enabled.
>> I hope file attachments works with nabble :)
>> good.txt refers to the output I expect. bad.txt refers to the unexpected
>> cascade.
>> good.txt 
>> bad.txt 
>> Gili
>> cowwoc wrote:
>>> When I merge() an Image object, EclipseLink seems to persist all objects
>>> referenced by the object. If I change to persist() it complains that one
>>> of the referenced object was transient but not cascaded.
>>> I am expecting the same warning to be issued for merge(). The
>>> documentation says that the default cascade is none but the behavior
>>> seems otherwise. I am using EclipseLink 1.0.1.
>>> Thank you,
>>> Gili

View this message in context:
Sent from the EclipseLink - Users mailing list archive at

Back to the top