[ https://issues.apache.org/jira/browse/OPENJPA-171?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12480455 ]
Abe White commented on OPENJPA-171: ----------------------------------- It would speed things up a lot if you attached a working test case demonstrating the problem. > EntityManager.getReference() returns an object of a wronc class > --------------------------------------------------------------- > > Key: OPENJPA-171 > URL: https://issues.apache.org/jira/browse/OPENJPA-171 > Project: OpenJPA > Issue Type: Bug > Affects Versions: 0.9.6 > Reporter: Stefano Juri > > I have a simple class system : a PersonImpl owns a set of AbstractAddresses. > An AbstractAddress can be an EMailAddressImpl or a PostalAddressImpl. All > these objects extend AbstractBusinessObject. > When I call entityManager.getReference(PersonImpl.class, "1") I get the > EMailAddressImpl object with id "1" instead of a PersonImpl object. > If I get the object with a query (select p from PersonImpl p where p.id='1') > everything is ok. > My mapping file is : > <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm > http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" > version="1.0"> > <mapped-superclass > class="ch.admin.bit.fw2.bm.AbstractBusinessObjectImpl"> > <attributes> > <id name="id"> > <column name="ID" /> > <generated-value strategy="SEQUENCE" > generator="TimeSeq"/> > <sequence-generator name="TimeSeq" > sequence-name="time()"/> > </id> > <version name="version" /> > </attributes> > </mapped-superclass> > > <entity class="ch.admin.bit.fw2.demo.bm.address.AbstractAddressImpl"> > <table name="ADDRESS"></table> > <inheritance strategy="SINGLE_TABLE"/> > <discriminator-column name="DISCRIMINANT" length="1"/> > <attributes> > <basic name="addressName"> > <column name="ADDRESS_NAME"/> > </basic> > </attributes> > </entity> > > <entity class="ch.admin.bit.fw2.demo.bm.address.EMailAddressImpl"> > <discriminator-value>E</discriminator-value> > <attributes> > <basic name="domain"> > <column name="EMAIL_DOMAIN"/> > </basic> > <basic name="name"> > <column name="EMAIL_NAME"/> > </basic> > </attributes> > </entity> > > <entity class="ch.admin.bit.fw2.demo.bm.address.PostalAddressImpl"> > <discriminator-value>P</discriminator-value> > <attributes> > <basic name="firstName"> > <column name="FIRST_NAME"/> > </basic> > <basic name="lastName"> > <column name="LAST_NAME"/> > </basic> > <basic name="street"></basic> > <basic name="country"></basic> > <basic name="zip"></basic> > <basic name="city"></basic> > </attributes> > </entity> > > <entity class="ch.admin.bit.fw2.demo.bm.person.PersonImpl"> > <table name="PERSON" /> > <attributes> > <basic name="title" /> > <basic name="firstName"> > <column name="FIRST_NAME" /> > </basic> > <basic name="lastName"> > <column name="LAST_NAME" /> > </basic> > <one-to-many name="addresses" > > target-entity="ch.admin.bit.fw2.demo.bm.address.AbstractAddressImpl"> > <join-table name="PERS_ADDR"> > <join-column name="ID_PERSON" /> > <inverse-join-column name="ID_ADDRESS" > /> > </join-table> > </one-to-many> > </attributes> > </entity> > > </entity-mappings> > And the database creation script is : > -------------------------------------------------- > -- Create Table ADDRESS > -------------------------------------------------- > Create table ADDRESS ( > ID VARCHAR(20) NOT NULL , > DISCRIMINANT CHARACTER(1) NOT NULL , > ADDRESS_NAME VARCHAR(35) NOT NULL , > EMAIL_DOMAIN VARCHAR(50) , > EMAIL_NAME VARCHAR(50) , > FIRST_NAME VARCHAR(35) , > LAST_NAME VARCHAR(35) , > STREET VARCHAR(35) , > CITY VARCHAR(35) , > ZIP VARCHAR(10) , > COUNTRY CHARACTER(2) , > VERSION TIMESTAMP > ) > ; > -------------------------------------------------- > -- Create Primary Key PRIMARY_KEY > -------------------------------------------------- > alter table ADDRESS > add constraint PERSON_KEY > Primary Key (ID); > -------------------------------------------------- > -- Create Table PERSON > -------------------------------------------------- > Create table PERSON ( > ID VARCHAR(20) NOT NULL , > FIRST_NAME VARCHAR(35) NOT NULL , > LAST_NAME VARCHAR(35) NOT NULL , > TITLE VARCHAR(35) NOT NULL , > VERSION TIMESTAMP > ) > ; > -------------------------------------------------- > -- Create Primary Key SQL060816161507820 > -------------------------------------------------- > alter table PERSON > add constraint ADDRESS_KEY > Primary Key (ID); > > -------------------------------------------------- > -- Create Table PERS_ADDR > -------------------------------------------------- > Create table PERS_ADDR ( > ID_PERSON VARCHAR(20) NOT NULL , > ID_ADDRESS VARCHAR(20) NOT NULL > ); > -------------------------------------------------- > -- Create Primary Key SQL060816161507820 > -------------------------------------------------- > alter table PERS_ADDR > add constraint PERS_ADDR_KEY > Primary Key (ID_PERSON,ID_ADDRESS); > > Insert into PERSON values('1', 'Enrico', 'Barilla', 'Mr',0); > Insert into PERSON values('2', 'Adelgrunde', 'Volkswagen', 'Ms',0); > > Insert into ADDRESS values('1', 'E', 'Home', 'barilla.it', 'enrico.barilla', > NULL, NULL, NULL, NULL, NULL, NULL, 0); > Insert into ADDRESS values('2', 'P', 'Office', NULL, NULL, NULL, NULL, > 'Käferstr. 78', 'Wolfsburg', '12345', 'DE', 0); > Insert into ADDRESS values('3', 'P', 'Home', NULL, NULL, NULL, NULL, 'Via > delle Lasagne 12', 'Roma', '67890', 'IT', 0); > Insert into PERS_ADDR values ('1','1'); > Insert into PERS_ADDR values ('1','3'); > Insert into PERS_ADDR values ('2','2'); -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.