openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Wisneski" <wisnes...@gmail.com>
Subject Re: [jira] Resolved: (OPENJPA-43) update of a persistent field using a @Lob annotation is not being marked dirty
Date Thu, 14 Sep 2006 19:29:54 GMT
that works.
    Address a = e.getHome();
    a.setCity("NewCity");
    e.setHome(null);
    e.setHome(a);

Also if I create a new instance of Address as in
   Address newa = new Address("....");
    e.setAddress(newa);

Both of the above work.

But doing an update with making a new copy of the Adresss does not work for
me.
   e.setHome( e.getHome().setCity("NEW"));

Do I have to override equals on the Address ?


On 9/14/06, Marc Prud'hommeaux <mprudhom@apache.org> wrote:
>
> David-
>
> > There was a typo in my code.  But even doing this, the update is
> > not being
> > written back to the database at commit or flush.
>
> That's a little surprising.
>
> What happens if you do this:
>
> Blob home = e.getHome();
> home.setStreet("new value");
> e.setHome(null);
> e.setHome(home);
>
>
>
>
> On Sep 14, 2006, at 11:31 AM, David Wisneski wrote:
>
> > I think I am doing what you suggest.  After changing the value of
> > home the
> > program does
> >  e.setHome( e.getHome().setStreet(" new value"));
> >
> > There was a typo in my code.  But even doing this, the update is
> > not being
> > written back to the database at commit or flush.
> >
> >
> > On 9/10/06, Marc Prud'hommeaux (JIRA) <jira@apache.org> wrote:
> >>
> >>     [ http://issues.apache.org/jira/browse/OPENJPA-43?page=all ]
> >>
> >> Marc Prud'hommeaux resolved OPENJPA-43.
> >> ---------------------------------------
> >>
> >>    Resolution: Invalid
> >>
> >> This is actually a known and intractible limitation: we are not
> >> able to
> >> intercept internal modifications for opaque types or arrays. So
> >> for those
> >> types, if OpenJPA is to detect that they were changed, they need
> >> to be
> >> re-set in their owning objects. E.g., in addition to doing:
> >>
> >> myPC.getSomeBlob().someInternalField++;
> >>
> >> you should also do:
> >>
> >> myPC.setSomeBlob(myPC.getSomeBlob());
> >>
> >> That should be sufficient to mary it "dirty". Alternately, you can
> >> use the
> >> OpenJPAEntityManager.dirty() method to explicitly mark the field
> >> dirty.
> >>
> >> > update of a persistent field using a @Lob annotation is not
> >> being marked
> >> dirty
> >> >
> >> ---------------------------------------------------------------------
> >> ---------
> >> >
> >> >                 Key: OPENJPA-43
> >> >                 URL: http://issues.apache.org/jira/browse/
> >> OPENJPA-43
> >> >             Project: OpenJPA
> >> >          Issue Type: Bug
> >> >          Components: kernel
> >> >            Reporter: David Wisneski
> >> >
> >> > An entity has a persistent field which is a serialable class
> >> annotated
> >> with @Lob.  I am able to
> >> > create and persist instances of this entity and field.  But when
> >> the
> >> entity is retrieved and the
> >> > field is updated, the update is not written back at commit.
> >> > @Entity
> >> >  class Employee {
> >> >   @Id  int id;
> >> >   @Lob  Address home;
> >> > class Home implements Serializable {
> >> >     String street
> >> >   EntityManager em =
> >> >   em.getTransaction().begin();
> >> >   Employee e = em.find(Employee.class, 1);
> >> >   Address home = e.getHome();
> >> >   home.setStreet("123 New Avenue");
> >> >   e.setHome(e);
> >> >   em.getTransaction().commit();   <--  the update to home
> >> address does
> >> not occur.
> >>
> >> --
> >> This message is automatically generated by JIRA.
> >> -
> >> If you think it was sent incorrectly contact one of the
> >> administrators:
> >> http://issues.apache.org/jira/secure/Administrators.jspa
> >> -
> >> For more information on JIRA, see: http://www.atlassian.com/
> >> software/jira
> >>
> >>
> >>
>
>

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