Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » EclipseLink » Eclipselink orphanRemoval in embedded entity not working(orphanRemoval in embedded entity not working)
Eclipselink orphanRemoval in embedded entity not working [message #1693904] Wed, 29 April 2015 09:05
sunil kumar is currently offline sunil kumarFriend
Messages: 1
Registered: April 2015
Junior Member
experienced some weird behaviour of JPA (EclipseLink and Hibernate) and I can't find it defined in the specs, so I hope someone can give me a hint.

Given the following scenario:

Entity C is assigned to table C
Entity B is an @Embeddable
- having a unidirectional @OneToOne reference to C (orphanRemoval=true)

Entity A is assigned to table A
- having an @Embedded reference to B
- having a unidirectional @OneToOne reference to C (orphanRemoval=true)

When I create an instance of
Code: [Select all] [Show/ hide]
a -------- (1 : 1) ------> c1
\----- (embedded) -----> b ------- (1 : 1) -------> c2

a having the 1:1 relation to c1 and having the relation to c2 via b and save it to the database, all SQL statements are created as expected. When I set both references to C (namely c1 and c2) to null and save the same entity again, I expect JPA to set the fields to null and delete the orphans afterwards.

Deletion of C takes place only for c1. c2 is not being deleted, though both fields are set to null.

The relations to C are are annotated as given below:

Code: [Select all] [Show/ hide]
@OneToOne(cascade = {PERSIST, MERGE, REFRESH}, orphanRemoval = true)
@JoinColumn(name = "<field_name>")
private C c;

This behaviour can be seen with all EclipseLink version starting from 2.3.3 up to 2.5.2-M1, as well as with Hibernate 4.3.4. EclipseLink only works (but showing the weird behaviour) when the entities are enhanced by static weaving. Without static weaving there is a NullPointerException in UnitOfWorkImpl.calculateChanges.

Code: [Select all] [Show/ hide]
java.lang.NullPointerException
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:696)
at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:438)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:863)
at OrphanRemovalTest.saveFlushAndClear(OrphanRemovalTest.java:74)
at OrphanRemovalTest.testApp(OrphanRemovalTest.java:47)


Even using @PrivateOwned in conjunction with EclipseLink does not change anything.

Is there any explanation for this?
Previous Topic:Saving NoSql @Embedded field generates array
Next Topic:Java 8 issues with nested join fetch
Goto Forum:
  


Current Time: Fri Nov 08 23:00:18 GMT 2024

Powered by FUDForum. Page generated in 0.02874 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top