openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefano Juri (JIRA)" <j...@apache.org>
Subject [jira] Created: (OPENJPA-171) EntityManager.getReference() returns an object of a wronc class
Date Tue, 13 Mar 2007 14:22:09 GMT
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.


Mime
View raw message