You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Mark Struberg (JIRA)" <ji...@apache.org> on 2010/11/09 15:16:07 UTC

[jira] Issue Comment Edited: (OPENJPA-1873) EntityManager#merge sometimes passes wrong entity values to @PostLoad EntityListeners

    [ https://issues.apache.org/jira/browse/OPENJPA-1873?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12930126#action_12930126 ] 

Mark Struberg edited comment on OPENJPA-1873 at 11/9/10 9:15 AM:
-----------------------------------------------------------------

but it seems that EclipseLink and Hibernate both fire the @PostLoad event for a merge. 
And albeit it is not 100% clear from the spec, there is a lot evidence that this behaviour is intended.

edit: the wording from the PostLoad + merge (3.2.7.1) + 'managed instance' in the spec indicate that @PostLoad should get fired if the merging gets called on a detached entity which exists in the database.

      was (Author: struberg):
    but it seems that EclipseLink and Hibernate both fire the @PostLoad event for a merge. 
And albeit it is not 100% clear from the spec, there is a lot evidence that this behaviour is intended.
  
> EntityManager#merge sometimes passes wrong entity values to @PostLoad EntityListeners 
> --------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-1873
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1873
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 2.0.0, 2.0.1, 2.0.2
>            Reporter: Mark Struberg
>         Attachments: OPENJPA-1873-unittest.patch
>
>
> 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

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.