Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[eclipselink-users] Problem on persisting ElementCollection mapping inside an embedded object

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

 


Back to the top