openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marc Prud'hommeaux <mprud...@apache.org>
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 18:38:22 GMT
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
View raw message