Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] EclipseLink persisting error (Missing mapping for field)

Hello Leon,

The JoinColumn in the @ManyToMany mapping is using "id" for the referencedColumnName. EclipseLink is case sensitive (because Java string comparisons are). Since EclipseLink defaults the IndustrialFamily's id attribute column name to "ID", it can't find a "id" column in in IndustrialFamily. The referencedColumnName values used to match the actual database column names defined or generated by default. The solution is to change the referencedColumnName value to "ID", or to define the @Id column name to be "id".
Best Regards,
Chris

Leon Derks wrote:
Hello

I have another problem.
When I am persisting an object using eclipselink, I get a Missing mapping for field error. (see stacktrace below)
Saving the object with Hibernate gives no error.

I have also added a part of my jpa mapping. The strange thing is that it is working correctly with hibernate.

Is this a bug?

@Entity
@Table(schema="PLI", name = "PLI_CATALOG_PRODUCTS")
@DiscriminatorColumn(name="PRODUCT_TYPE")
public abstract class CatalogProduct{
     @Id
   @GeneratedValue(generator="seqGen")
@SequenceGenerator(name="seqGen",sequenceName="PLI_SEQ", allocationSize=1)
   private long id;

   private String code;
     @ManyToOne(cascade=PERSIST)
   @JoinColumn(name="family_id", referencedColumnName = "id")
   private IndustrialFamily industrialFamily;
  ......
}

@Table(schema="PLI", name = "PLI_INDUSTRIAL_FAMILIES")
@Entity
public class IndustrialFamily {
     @Id
   @GeneratedValue(generator="seqGen")
@SequenceGenerator(name="seqGen",sequenceName="PLI_SEQ", allocationSize=1)
   private long id;

    .....
}

Tables:

CREATE TABLE PLI_INDUSTRIAL_FAMILIES
(
ID NUMBER(10, 0) NOT NULL,
CODE VARCHAR2(20) NOT NULL,
NAME VARCHAR2(100) NOT NULL
)
;

CREATE TABLE PLI_CATALOG_PRODUCTS
(
ID NUMBER(10, 0) NOT NULL,
CODE VARCHAR2(500) NOT NULL,
FAMILY_ID NUMBER(10, 0) NOT NULL
)
;


javax.persistence.RollbackException: Exception [EclipseLink-45] (Eclipse Persistence Services - 1.0 (Build SNAPSHOT - 20080409)): org.eclipse.persistence.exceptions.DescriptorException Exception Description: Missing mapping for field [PLI.PLI_INDUSTRIAL_FAMILIES.id]. Descriptor: RelationalDescriptor(********.model.IndustrialFamily --> [DatabaseTable(PLI.PLI_INDUSTRIAL_FAMILIES)]) at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:109) at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:70)
   at ********.test.ImportTest.testSaveImport(ImportTest.java:44)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at junit.framework.TestCase.runTest(TestCase.java:154)
   at junit.framework.TestCase.runBare(TestCase.java:127)
   at junit.framework.TestResult$1.protect(TestResult.java:106)
   at junit.framework.TestResult.runProtected(TestResult.java:124)
   at junit.framework.TestResult.run(TestResult.java:109)
   at junit.framework.TestCase.run(TestCase.java:118)
   at junit.framework.TestSuite.runTest(TestSuite.java:208)
   at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) Caused by: Exception [EclipseLink-45] (Eclipse Persistence Services - 1.0 (Build SNAPSHOT - 20080409)): org.eclipse.persistence.exceptions.DescriptorException Exception Description: Missing mapping for field [PLI.PLI_INDUSTRIAL_FAMILIES.id]. Descriptor: RelationalDescriptor(********.model.IndustrialFamily --> [DatabaseTable(PLI.PLI_INDUSTRIAL_FAMILIES)]) at org.eclipse.persistence.exceptions.DescriptorException.missingMappingForField(DescriptorException.java:938) at org.eclipse.persistence.internal.descriptors.ObjectBuilder.extractValueFromObjectForField(ObjectBuilder.java:1856) at org.eclipse.persistence.mappings.OneToOneMapping.writeFromObjectIntoRow(OneToOneMapping.java:1058) at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:830) at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildRow(ObjectBuilder.java:818) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:430) at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:78) at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:88) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:290) at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:653) at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:576) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:114) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:86) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2603) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1061) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1045) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:991) at org.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:254) at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsForClassWithChangeSet(CommitManager.java:229) at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:185) at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:2991) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1240) at org.eclipse.persistence.internal.jpa.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:416) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1332) at org.eclipse.persistence.internal.jpa.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:145) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1000) at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:91)
   ... 20 more



_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users


Back to the top