You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Pinaki Poddar (JIRA)" <ji...@apache.org> on 2008/08/08 08:46:46 UTC

[jira] Commented: (OPENJPA-677) Single Table Inheritance Strategy causes entity identity issues

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

Pinaki Poddar commented on OPENJPA-677:
---------------------------------------

The bug is reproducible.

The workaround is to change RegularUsr.admin field from lazily loaded to eagerly loaded.

The bug seems to be how OpenJPA determines the concrete type of a relation from the record row data and the discrimnator column. In this case
mysql> select * from computeruser;
---------------------------------------
| oid   DTYPE    ADMIN_OID 
---------------------------------------
 101     admin       NULL 
 102     user           101 
---------------------------------------

During load of row 102, i.e. '102 'user' 101', OpenJPA tries to store a FK (pointing to Admin) for the row 102 (which represents a RegularUser).
However, because the row's discrimnator value is 'user', OpenJPA wrongly assumes that 101 is identifier for RegularUser and that is the oid is store intermediately in RegularUser-102's admin field.

Later when OpenJPA reads the full row 101, (say for find()) it does construct a Admin-102 instance but that other identifier has created a different Admin object  and hence the error.

Eager loading gets rid of the problem because then both the rows are read in a single query and the ambiguity of discriminator value  does not arise.

> Single Table Inheritance Strategy causes entity identity issues
> ---------------------------------------------------------------
>
>                 Key: OPENJPA-677
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-677
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 1.1.0, 1.1.1, 1.2.0, 1.2.1, 1.3.0
>         Environment: IBM Java 1.5
>            Reporter: Przemek Koprowski
>            Assignee: Pinaki Poddar
>         Attachments: TestJPAIdentityWhenSingleTable.zip
>
>
> Entity objects that are pulled out from the database using bean methods (get*()) are not the same objects that are pulled out using using other methods(find(), getReference()). 
> This occurs only when using Single Table Inheritance.
> This works on 0.9.7, in other versions Exception is thrown (https://issues.apache.org/jira/browse/OPENJPA-494) , in latest version from trunk test fails.

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