[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] merge() cascading by default?
|
It looks like for new objects they will just be registered entirely
(persistence by reachablity/cascade all). I'm not sure what the JPA spec
says on this, as merge() is different than persist(), but it is probably
worth logging a bug in EclipseLink to have this scenario reviewed.
Either way you are going to get an error, so best to fix your object that
you are merging.
cowwoc wrote:
>
> 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
>>>>
>>>
>>>
>>
>>
>
>
-----
---
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
http://www.eclipse.org/eclipselink/
EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
TopLink
Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
http://wiki.oracle.com/page/TopLink TopLink
Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
http://www.nabble.com/EclipseLink-f26430.html EclipseLink
Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
--
View this message in context: http://www.nabble.com/merge%28%29-cascading-by-default--tp19501823p19533956.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.