Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » EclipseLink » JPA - orphanRemoval in embedded entity not working
JPA - orphanRemoval in embedded entity not working [message #1279753] Sat, 29 March 2014 06:56
Florian Jung is currently offline Florian JungFriend
Messages: 1
Registered: March 2014
Junior Member
I 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
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:

@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.

	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(
	at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(
	at OrphanRemovalTest.saveFlushAndClear(
	at OrphanRemovalTest.testApp(

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

Is there any explanation for this?
Previous Topic:EclipseLink deadlock after SELECT 1 FROM DUAL
Next Topic:JPA Caching and NPE
Goto Forum:

Current Time: Sun Aug 28 10:42:09 GMT 2016

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

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