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) <[EMAIL PROTECTED]> 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




Reply via email to