Skip to main content

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

It is not expected behavior.

The code you post is wrong though,

>> @Embedded
>> Public Phones implements Serializable

@Embedded should be @Embeddable, not sure if it is just a typo.

Try putting the ElementCollection in the parent, does it work?  If it does,
it would seem to be a bug, try the latest release, if it still occurs then
log a bug, and include your test case.



Alay, Aysun wrote:
> 
> 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
> 
> 
> 


-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland 
http://www.eclipse.org/eclipselink/
 EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
TopLink 
Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink , 
http://wiki.oracle.com/page/TopLink TopLink 
Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink , 
http://www.eclipse.org/forums/index.php?t=thread&frm_id=111&S=1b00bfd151289b297688823a00683aca
EclipseLink 
Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence 
Blog:  http://java-persistence-performance.blogspot.com/ Java Persistence
Performance 
-- 
View this message in context: http://old.nabble.com/Problem-on-persisting-ElementCollection-mapping-inside-an-embedded-object-tp33453913p33458430.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top