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

EntityManager#merge sometimes passes wrong entity values to @PostLoad EntityListeners

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.0, 2.0.1, 2.0.2
    • 2.2.0
    • kernel
    • None

    Description

      I've tested this with the latest from branches/2.0.x.

      My entity has an @EntityListeners which observes the @PostLoad lifecycle event. This listener stores the 'old' values from the database for later use (see http://struberg.wordpress.com/2010/07/31/howto-changelog-with-jpa/ for the intention behind). All works well if the table has only a few rows. But if you add more rows, OpenJPA tries to optimize the access and only loads the @Version field + the dirty fields. In this case the merging seems to be wrong, because I get the NEW values from the dirty fields instead of the original values from the database passed to my @PostLoad method.

      Did cost me a few grey hairs to track down the differences between the working and the broken scenarios here But finally I was able to creat a unit test showing the problem

      Attachments

        1. postloadtest.zip
          11 kB
          Mark Struberg
        2. OPENJPA-1873-unittest.patch
          9 kB
          Mark Struberg
        3. openjpa-1873-hack-1.patch
          3 kB
          Richard G. Curtis
        4. OPENJPA-1873-fix3.patch
          27 kB
          Mark Struberg
        5. OPENJPA-1873-fix2.patch
          24 kB
          Mark Struberg
        6. OPENJPA-1873-fix1.patch
          17 kB
          Mark Struberg

        Activity

          People

            struberg Mark Struberg
            struberg Mark Struberg
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: