> Another question : If I don't have @Dependent, when I nullify the child
> object in ClassA (A.b = null), its corresponding child records will be
> deleted, but parent will still be around

If you null out the relation, the related-to record will still exist,
but the relation will be severed. I.e., there will be an UPDATE
setting the fk to null.

> So, in order to delete the child object do I need @Dependent?

If you want children to be deleted if relationships to them are
severed, then you need @Dependent, or you need to manually do the
em.remove() yourself.

-Patrick

On Nov 7, 2007 5:04 AM, Gul Onural <[EMAIL PROTECTED]> wrote:
> Another question : If I don't have @Dependent, when I nullify the child
> object in ClassA (A.b = null), its corresponding child records will be
> deleted, but parent will still be around. So, in order to delete the
> child object do I need @Dependent?
>
>
> -----Original Message-----
> From: Onural, Gul (CAR:9S30)
> Sent: Wednesday, November 07, 2007 7:51 AM
> To: [email protected]
>
> Subject: RE: How to update contained entity with openjpa
>
>
> I already have cascade = CascadeType.ALL defined in the ClassA. Is
> @Dependent just to remove the child object without removing the parent,
> where CascadeType.ALL removes the child object when the parent object is
> removed ?
>
> public class ClassA {
>       int idA;
>       @OneToMany(mappedBy = "myA", cascade = CascadeType.ALL,
> targetEntity = classB, fetch = FetchType.EAGER)
>       ClassB b;
>       String name;
>       ...
>  }
>
>
> public class ClassB {
>    int idB
>    @OneToOne
>    @JoinColumn(name = "idA")
>    private ClassA myA;
>     ....
>  }
>
>
> -----Original Message-----
> From: Patrick Linskey [mailto:[EMAIL PROTECTED]
> Sent: Wednesday, November 07, 2007 4:35 AM
> To: [email protected]
> Subject: Re: How to update contained entity with openjpa
>
> In your first example, you'll end up adding a new row to the B table
> each time you do the new assignment -- you'll see an INSERT statement
> each time the code executes.
>
> In the second, you'll end up updating a single row in the B table each
> time -- you'll see an UPDATE statement.
>
> You could also set up the relation such that your first example would
> result in a DELETE for the old row and an INSERT for the new row. You
> would do this with the @Dependent annotation.
>
> -Patrick
>
> On Nov 6, 2007 7:34 PM, Gul Onural <[EMAIL PROTECTED]> wrote:
> >
> > Let say I have classB inside classA, both are @Entity and @OneToOne
> > relationships between the two.
> >
> > Let say I already persisted classA and classB and I want to update
> > variable b of the ClassA using following code.
> >
> > I am trying to understand if the database effect of assigning a "new"
> > ClassB to variable b (Code piece-I below) is any different than
> > getting b first than updating B's member variables (Code piece -II) ?
> >
> > // Pseudo code piece - I
> > startTransaction
> >     X = findClassA
> >     X.setb(new ClassB)
> > commitTransaction
> >
> > // Pseudo code piece - II
> > startTransaction
> >     X = findClassA
> >     X.getb.setName("...)
> > commitTransaction
> >
> > public class ClassA {
> >      int idA;
> >      @OneToMany(mappedBy = "myA", cascade = CascadeType.ALL,
> > targetEntity = classB, fetch = FetchType.EAGER)
> >      ClassB b;
> >      String name;
> >      ...
> > }
> >
> > public class ClassB {
> >   int idB
> >   @OneToOne
> >   @JoinColumn(name = "idA")
> >   private ClassA myA;
> >    ....
> > }
> >
> >
> >
>
>
>
> --
> Patrick Linskey
> 202 669 5907
>



-- 
Patrick Linskey
202 669 5907

Reply via email to