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.