Issue 2 also does not occury when Activity to Event is not set to cascade.
The issue also doesn't occur when StringI18N is removed and the object graph is 
only three entities deep. So it is quite a complicated combination of factors: 
no detached state field, four entities and a cascade from Activity to Event...

-----Oorspronkelijk bericht-----
Van: Henno Vermeulen [mailto:[email protected]] 
Verzonden: woensdag 13 april 2011 14:30
Aan: '[email protected]'
Onderwerp: two issues when not using a DetachedStateField

We use OpenJPA 2.1.0 with build time enhancement. We have a client/server 
situation so we always detach + serialize entities on commit using fetch groups:

<property name="openjpa.DetachState" 
value="fetch-groups(DetachedStateField=false)" />
            <property name="openjpa.AutoDetach" value="commit" /

We currently don't use a DetachedStateField or DetachedStateManager because 
everything worked fine without them until now.

I found two issues that don't occur when I use DetachedStateField=true. 
(According to the user guide OpenJPA should function just as well without one 
except that it may be less efficient. "OpenJPA can take advantage of a detached 
state field to make the attach process more efficient. This field is added by 
the enhancer and is not visible to your application.")


Issue 1:
When I add a new entity to a List of a detached (but not Serialized) entity and 
then merge, OpenJPA throws:

org.apache.openjpa.persistence.InvalidStateException: The context has been 
closed.  The stack trace at which the context was closed is held in the 
embedded exception.
FailedObject: java.lang.IllegalStateException
            at 
org.apache.openjpa.kernel.BrokerImpl.assertOpen(BrokerImpl.java:4615)
.......

We don't experience this as a problem because we always Serialize an entity 
before adjusting it!!!


Issue 2:
We have an object graph of four entities with autogenerated Id columns:

Event (OneToMany bidirectional) Activity (OneToMany) ProductOrderLine 
(OneToOne) StringI18N

All relations are FetchType.EAGER and Cascade.ALL.

When I add a new Activity (with one new ProductOrderLine with one new 
StringI18N) to an existing Event and then merge the Event, OpenJPA tries to 
insert a null value into the StringI18N Id column. This seems to be only 
detected on transaction commit.

This problem does not occur when:

-          I make the Event - Activity relation unidirectional, i.e. Activity 
does not know it's parent Event.

-          The Event is new as well.

-          (workaround) I first add the new Activity to the Event but with no 
ProductOrderLines, then merge the Event, then add the ProductOrderLine to the 
Activity in the and merge the Event again.

Are these known issues? What is the best way for me to go? Should I do my 
workaround or should I try to use a detached state field?
Shall I report this to JIRA? I have a test case which shows these issues.


Regards,

Henno Vermeulen
Huize Molenaar

Reply via email to