Hi all,
I get a “Missing mapping for field” error (you can see the full stack trace below) when I tried to persist an entity via EclipseLink 2.3.2. The problem is related with having ElementCollection mapping for a List of complex type inside an embedded object. I just wanted to check if this is a bug or an expected behavior.
Here is my JPA mapping
@Entity
public Employee implements Serializable
{
@Id
Long id;
@Embedded
Private employeeBasic;
}
@Embedable
Public EmployeeBasic implements Serializable
{
@ElementCollection
@CollectionTable(name=”PHONES”, joinColumns = @JoinColumn(name=”EMPLOYEE_ID”))
Prívate List<Phones> phones;
}
@Embedded
Public Phones implements Serializable
{
@Column(name=”PHONE_TYPE”)
prívate String phoneType;
@Column(name=”PHONE_NUMBER”)
private long phoneNumber;
When I tried to persist Employee, I am getting this exception. The same code works if I have a simple data type like List<String> instead of List<Phones>
Exception in thread "main" javax.persistence.RollbackException: Exception [EclipseLink-45] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Missing mapping for field [EMPLOYEE.ID].
Descriptor: RelationalDescriptor(com.test.EmployeeBasic -->
[DatabaseTable(EMPLOYEE)])
at
org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:102)
at
org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:63)
at com.test.TestAddAttr.main(TestAddAttr.java:35)
Caused by: Exception [EclipseLink-45] (Eclipse Persistence Services -
2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Missing mapping for field [EMPLOYEE.ID].
Descriptor: RelationalDescriptor(com.test.EmployeeBasic -->
[DatabaseTable(EMPLOYEE)]).eclipse.persistence.exceptions.DescriptorException.missingMappingForField(DescriptorException.java:969)
at org.eclipse.persistence.internal.descriptors.ObjectBuilder.extractValueFromObjectForField(ObjectBuilder.java:2566)
at org.eclipse.persistence.mappings.AggregateCollectionMapping.getReferenceObjectKeys(AggregateCollectionMapping.java:1229)
at org.eclipse.persistence.mappings.AggregateCollectionMapping.getAndPrepareModifyQueryForInsert(AggregateCollectionMapping.java:2248)
at org.eclipse.persistence.mappings.AggregateCollectionMapping.preInsert(AggregateCollectionMapping.java:2193)
at org.eclipse.persistence.descriptors.DescriptorQueryManager.preInsert(DescriptorQueryManager.java:1099)
at org.eclipse.persistence.mappings.AggregateMapping.preInsertAttributeValue(AggregateMapping.java:787)
at org.eclipse.persistence.mappings.AggregateMapping.preInsert(AggregateMapping.java:757)
at org.eclipse.persistence.descriptors.DescriptorQueryManager.preInsert(DescriptorQueryManager.java:1099)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:425)
at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80)
at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90)
at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:287)
at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:829)
at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:728)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108)
at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2863)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1501)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1483)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1443)
at org.eclipse.persistence.internal.sessions.CommitManager.commitNewObjectsForClassWithChangeSet(CommitManager.java:224)
at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:123)
at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3784)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1407)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:634)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1497)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitRootUnitOfWork(RepeatableWriteUnitOfWork.java:265)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitAndResume(UnitOfWorkImpl.java:1135)
at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commitInternal(EntityTransactionImpl.java:84)
... 2 more
Thanks,
Aysun