[
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
enabled
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")
Gili
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.
>>
>> http://www.nabble.com/file/p19501990/good.txt good.txt
>> http://www.nabble.com/file/p19501990/bad.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: http://www.nabble.com/merge%28%29-cascading-by-default--tp19501823p19512014.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.