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

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:EclipseLink deadlock after SELECT 1 FROM DUAL
Next Topic:JPA Caching and NPE
Goto Forum:
  


Current Time: Tue Sep 30 23:58:37 GMT 2014

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

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