You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Abe White (JIRA)" <ji...@apache.org> on 2007/03/13 17:11:09 UTC

[jira] Commented: (OPENJPA-171) EntityManager.getReference() returns an object of a wronc class

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