Uploaded image for project: 'OpenJPA'
  1. OpenJPA
  2. OPENJPA-1644

Null field values after calling EntityManager.remove()

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.2.2, 2.0.0
    • Fix Version/s: 1.2.3, 2.1.0
    • Component/s: None
    • Labels:
      None

      Description

      Fields of an entity instance are nulled after calling EntityManager.remove() on an instance.

      For example, I have an entity class named User. I persist and then remove an instance of User.

      //
      // EntityManager em is initialized before the following code
      //

      em.getTransaction().begin();
      User user = new User();
      user.setName("name1");
      em.persist(user);
      em.getTransaction().commit();
      System.out.println(user.getName); // will print out name1
      em.getTransaction().begin();
      em.remove(user);
      em.getTransaction().commit();
      System.out.println(user.getName); // will print out null (oh no!)

      After I persist and remove the same instance of User, it's fields became null. I believe this shouldn't be the case as Section "3.2.3 Removal" of the 2.0 spec states:

      "After an entity has been removed, its state (except for generated state) will be that of the entity at the point at which the remove operation was called."

        Activity

        Hide
        curtisr7 Rick Curtis added a comment -

        This patch fixes the reported behavior, but I'm not sure what all it will break(Although all current unit tests pass).

        I need to do some more testing before it is committed.

        Show
        curtisr7 Rick Curtis added a comment - This patch fixes the reported behavior, but I'm not sure what all it will break(Although all current unit tests pass). I need to do some more testing before it is committed.
        Hide
        curtisr7 Rick Curtis added a comment -

        I did some research as to why we were clearing out the fields of an Entity after deleting it and it appears that it is something that has been with us from the JDO days. Per the JDO spec:

        "A persistent-deleted instance transitions to transient at commit. During the transition, its persistent fields are written with their Java default values...."The net of that is that after an instance is deleted, the provider must clear out all fields of that Entity.

        The JPA 2.0 spec states something along these lines : "After an entity has been removed, its state (except for generated state) will be that of the entity at the point at which the remove operation was called." I'll be committing changes shortly to support the JPA spec.

        Show
        curtisr7 Rick Curtis added a comment - I did some research as to why we were clearing out the fields of an Entity after deleting it and it appears that it is something that has been with us from the JDO days. Per the JDO spec: "A persistent-deleted instance transitions to transient at commit. During the transition, its persistent fields are written with their Java default values...."The net of that is that after an instance is deleted, the provider must clear out all fields of that Entity. The JPA 2.0 spec states something along these lines : "After an entity has been removed, its state (except for generated state) will be that of the entity at the point at which the remove operation was called." I'll be committing changes shortly to support the JPA spec.
        Hide
        mikedd Michael Dick added a comment -

        Closing issue which has been resolved for some time. If you believe the issue is not resolved please reopen or open a new issue.

        Show
        mikedd Michael Dick added a comment - Closing issue which has been resolved for some time. If you believe the issue is not resolved please reopen or open a new issue.

          People

          • Assignee:
            curtisr7 Rick Curtis
            Reporter:
            leoisiah Leo Isiah Sambayan
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development