Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Cannot Reproduce
-
0.9.6
-
None
-
None
-
None
Description
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');