[ https://issues.apache.org/jira/browse/OPENJPA-1912?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12986662#action_12986662 ]
Mark Struberg commented on OPENJPA-1912: ---------------------------------------- oki, starting with that stuff now. current classes just generate a readExternal() and writeExternal which first externalizes some OpenJPA specific fields like the pcStateManager, et al and then comes the single fields. For providing something like super.readYourOwnStuff() we need to split the fields from the rest. So I'll start with introducing 2 new methods readExternalFields() and writeExternalFields() which might then invoke the super.readExternalFields(). Any objections or tips? > enhancer generates invalid code if fetch-groups is activated > ------------------------------------------------------------ > > Key: OPENJPA-1912 > URL: https://issues.apache.org/jira/browse/OPENJPA-1912 > Project: OpenJPA > Issue Type: Bug > Components: Enhance > Affects Versions: 2.0.0, 2.0.1, 2.1.0 > Reporter: Mark Struberg > Priority: Critical > Attachments: OPENJPA-1912-test.patch > > > If openjpa.DetachState =fetch-groups is used, the enhancer will add a > 'implements Externalizable' + writeExternal + readExternal. > The problem is, that writeExternal and readExternal will also try to > externalize the private members of any given superclass. Thus we get a > runtime Exception that we are not allowed to access those fields. > Example: > @Entity > public abstract class AbstractGroup { > ... > @Temporal(TemporalType.TIMESTAMP) > @TrackChanges > private Date applicationBegin; > ... > } > and > @Entity > public class Group extends AbstractGroup { > ... > } > will result in the following code (decompiled with jad): > public void writeExternal(ObjectOutput objectoutput) > throws IOException > { > pcWriteUnmanaged(objectoutput); > if(pcStateManager != null) > { > if(pcStateManager.writeDetached(objectoutput)) > return; > } else > { > objectoutput.writeObject(pcGetDetachedState()); > objectoutput.writeObject(null); > } > objectoutput.writeObject(applicationBegin); > objectoutput.writeObject(applicationEnd); > objectoutput.writeObject(applicationLocked); > objectoutput.writeObject(approvalRequired); > ... -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.