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

I just found out that the exception happening when there are more than one entity retrieved from the database. If I retrieve one record and remove that then it is okay if there are more than one record has been read from the db and one of them is being removed then the exception is thrown.

aysun

-----Original Message-----
From: eclipselink-users-bounces@xxxxxxxxxxx [mailto:eclipselink-users-bounces@xxxxxxxxxxx] On Behalf Of Alay, Aysun
Sent: Wednesday, March 07, 2012 2:34 PM
To: EclipseLink User Discussions
Subject: Re: [eclipselink-users] Problem on persisting ElementCollection mapping inside an embedded object

Persist and read works when the ElementCollection is in parent but I am having problem on delete though. 

EclipseLink throws NullPointer exception while extraing a value from the instance variable [phoneType] in the [com.test.Phones]

Descriptor " RelationalDescriptor (com.test.Phones -- > DatabaseTable[phoneType -->[PHONE_TYPE]

This is so weird, I have pone numbers persisted in the db already. When call entityManager.remove(employee) , EclipseLink is having trouble deleting the associated phones for this employee I think.

Aysun

-----Original Message-----
From: eclipselink-users-bounces@xxxxxxxxxxx [mailto:eclipselink-users-bounces@xxxxxxxxxxx] On Behalf Of James Sutherland
Sent: Wednesday, March 07, 2012 9:36 AM
To: eclipselink-users@xxxxxxxxxxx
Subject: 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.

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

Back to the top