openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Philippe Alexis" <philippe.ale...@gmail.com>
Subject Re: [jira] Commented: (OPENJPA-231) Incorrect handling of cascading bidirectional collections during merge/attach
Date Thu, 31 May 2007 21:05:59 GMT
Hi Gokhan,

On 5/23/07, Gokhan Ergul < gokhan.ergul@telenity.com> wrote:

Philippe Alexis wrote:

> The question is.. Why does OpenJPA expect, even force, the users to
> > allocate for cascading from child to parent regardless of whether they
> mean to or not?
>
> I don't think that's the intention, but it's just a glitch.


In the source code, the Deity "relations" example has the following:

    @OneToOne(cascade=CascadeType.ALL)
    private Deity mother;

    @OneToOne(cascade=CascadeType.ALL)
    private Deity father;


The way I see it, OpenJPA is telling users that *they* are doing something
wrong when they merge
a new parent entity that cascades to its child (also a new entity) which
doesn't annotate its parent
with cascade.

There's that, and regarding your mentioning "catching free-riders"

> The way I see it, the intent of  "Encountered new object B@..."
> exception is to catch freeriders, iow, to prevent attaching new objects
> where there's no defined cascade-merge relation from (the set of)
> currently attached object(s).

here's what the JPA specification has got to say:
____________________________________________________________________
3.2.4.1 Merging Detached Entity State

• If X is a new entity instance, a new managed entity instance X' is created
and the state of X is
copied into the new managed entity instance X'.

• If X is an entity merged to X', with a reference to another entity Y,
where cascade=MERGE
or cascade=ALL is not specified, then navigation of the same association
from X' yields a
reference to a managed object Y' with the same persistent identity as Y.
____________________________________________________________________

According to the implementation, in the latter case, Y would necessarily be
detached;
the use-case presented by you shows that it needs not be.

Based on the specification, if a new entity B as parent didn't cascade to
its new child C,
and the user attempted a merge(b), the problem shouldn't be about that
there's no cascading
specified, but that there's no managed entity C' .
The advice about cascading would then be just that, an advice.

J-Philippe.

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message