[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.