[ 
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.

Reply via email to