First this is a bug so please file a issue in the bug tracker.
Second, you will need to remove the @AssociationOverride from your code and use a session customer to update the join columns in native TopLink.
Persistence.xml entry:
<property name="toplink.session.customizer" value="mypackage.EmbeddableCustomizer"/>
Customizer Class :
package mypackage;
import oracle.toplink.essentials.descriptors.ClassDescriptor;
import oracle.toplink.essentials.mappings.AggregateObjectMapping;
import oracle.toplink.essentials.sessions.Session;
import oracle.toplink.essentials.tools.sessionconfiguration.SessionCustomizer;
import ....ProcessActivityResult.class
public class EmbeddableCustomizer implements SessionCustomizer {
public void customize(Session session) throws Exception {
//get internal representation of Class to Database mappings
ClassDescriptor descriptor = (ClassDescriptor)session.getDescriptor(ProcessActivityResult.class);
((AggregateObjectMapping)descriptor.getMappingForAttributeName("valueActual")).addFieldNameTranslation("ACTUAL_SELECTIONLISTITEMID","SELECTIONLISTITEMID");
}
}
--Gordon
-----Original Message-----
From: Christian Kerwer [mailto:Christian.Kerwer_at_t-online.de]
Sent: Wednesday, February 06, 2008 9:01 AM
To: persistence_at_glassfish.dev.java.net
Subject: Problem with @AssociationOverride on Embedded ManyToOne Relation
Hi everyone,
I'm trying to use an @AssociationOverride on a manyToOne relation of an Emedded Type to rename the Column in the actual Entity:
@Entity
Public class ProcessActivityResult
{
.
@Embedded
@AssociationOverride(name="selectionListItem", joinColumns=_at_JoinColumn(name="ACTUAL_SELECTIONLISTITEMID"))
private DynamicAttributeVal valueActual;
}
@Embeddable
public class DynamicAttributeVal
{
.
@ManyToOne
@JoinColumn( name="SELECTIONLISTITEMID" )
private SelectionListItem selectionListItem;
}
This leads to the following exception:
javax.persistence.PersistenceException: Exception [TOPLINK-28018] (Oracle TopLink Essentials - 2.0.1 (Build b03-fcs (10/03/2007))): oracle.toplink.essentials.exceptions.EntityManagerSetupException
Exception Description: predeploy for PersistenceUnit [toplink] failed.
Internal Exception: java.lang.NullPointerException
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:643)
at oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createContainerEntityManagerFactory(EntityManagerFactoryProvider.java:244)
at com.sun.enterprise.server.PersistenceUnitLoaderImpl.load(PersistenceUnitLoaderImpl.java:149)
at com.sun.enterprise.server.PersistenceUnitLoaderImpl.load(PersistenceUnitLoaderImpl.java:84)
at com.sun.enterprise.server.AbstractLoader.loadPersistenceUnits(AbstractLoader.java:898)
at com.sun.enterprise.server.ApplicationLoader.doLoad(ApplicationLoader.java:184)
at com.sun.enterprise.server.TomcatApplicationLoader.doLoad(TomcatApplicationLoader.java:126)
at com.sun.enterprise.server.AbstractLoader.load(AbstractLoader.java:244)
at com.sun.enterprise.server.ApplicationManager.applicationDeployed(ApplicationManager.java:336)
at com.sun.enterprise.server.ApplicationManager.applicationDeployed(ApplicationManager.java:230)
at com.sun.enterprise.server.ApplicationManager.applicationDeployed(ApplicationManager.java:203)
at com.sun.enterprise.server.ApplicationManager.applicationEnabled(ApplicationManager.java:763)
at com.sun.enterprise.admin.event.AdminEventMulticaster.invokeApplicationDeployEventListener(AdminEventMulticaster.java:934)
at com.sun.enterprise.admin.event.AdminEventMulticaster.handleApplicationDeployEvent(AdminEventMulticaster.java:912)
at com.sun.enterprise.admin.event.AdminEventMulticaster.processEvent(AdminEventMulticaster.java:461)
at com.sun.enterprise.admin.event.AdminEventMulticaster.multicastEvent(AdminEventMulticaster.java:176)
at com.sun.enterprise.admin.mbeans.ApplicationsConfigMBean.sendEnableConfigChangeEventExplicitly(ApplicationsConfigMBean.java:1834)
at com.sun.enterprise.admin.mbeans.ApplicationsConfigMBean.enable(ApplicationsConfigMBean.java:1902)
The second try using the AssociationOverride on the Entity like this:
@Entity
@AssociationOverride(name=" valueActual.selectionListItem", joinColumns=_at_JoinColumn(name="ACTUAL_SELECTIONLISTITEMID"))
Public class ProcessActivityResult
{
.
@Embedded
private DynamicAttributeVal valueActual;
}
Doesn't effect the renaming. In this case toplink looks up for a column named ,SELECTIONLISTITEMID' instead of ,ACTUAL_SELECTIONLISTITEMID'.
Can anybody help, this is very urgent!
Christian Kerwer