Hi Ramiro, Happy New Year to you too :)
So is it possible that the database row that causes this exception does not map to any concrete subclass entity qualifier? Andrus On Jan 3, 2013, at 8:54 PM, Ramiro Aparicio <[email protected]> wrote: > Hi and happy new year to everyone, > > I am back with my happy inheritance one more time. > I am using single table inheritance and just in case someone did not remember > the model here is a simplification about it: > > abstract SessionLog it has relations to other tables as Log or User > SessionLogApi and SessionLogWeb that inherits from SessionLog they have > specific information about the session type and their own relations > > I have found some problems with this kind of mapping but till now I have > always find a way to hack around Cayenne problems with this and today (we are > really near to put the new version with inheritance in production) I have > struck against this exception: > > Caused by: org.apache.cayenne.CayenneRuntimeException: [v.3.1B1 May 28 2012 > 18:42:43] Error creating object of class > 'com.proton.ks.persistence.SessionLog' > at > org.apache.cayenne.reflect.PersistentDescriptor.createObject(PersistentDescriptor.java:288) > at > org.apache.cayenne.reflect.LazyClassDescriptorDecorator.createObject(LazyClassDescriptorDecorator.java:73) > at > org.apache.cayenne.access.DataContext.findOrCreateObject(DataContext.java:1178) > at > org.apache.cayenne.access.ObjectResolver.objectFromDataRow(ObjectResolver.java:151) > at > org.apache.cayenne.access.ObjectResolver.objectFromDataRow(ObjectResolver.java:137) > at > org.apache.cayenne.access.ObjectResolver.objectsFromDataRows(ObjectResolver.java:121) > at > org.apache.cayenne.access.ObjectResolver.synchronizedObjectsFromDataRows(ObjectResolver.java:102) > at > org.apache.cayenne.access.ObjectResolver.synchronizedRootResultNodeFromDataRows(ObjectResolver.java:93) > at > org.apache.cayenne.access.DataDomainQueryAction$ObjectConversionStrategy.toResultsTree(DataDomainQueryAction.java:581) > at > org.apache.cayenne.access.DataDomainQueryAction$SingleObjectConversionStrategy.convert(DataDomainQueryAction.java:637) > at > org.apache.cayenne.access.DataDomainQueryAction.interceptObjectConversion(DataDomainQueryAction.java:465) > at > org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:129) > at org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:754) > at > org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:1003) > at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:744) > at > org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:350) > at > org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:106) > at > org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:93) > at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:989) > at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:978) > at > org.apache.cayenne.util.RelationshipFault.resolveFromDB(RelationshipFault.java:89) > at > org.apache.cayenne.util.PersistentObjectList.resolvedObjectList(PersistentObjectList.java:301) > at > org.apache.cayenne.util.PersistentObjectList.toArray(PersistentObjectList.java:278) > at java.util.ArrayList.(ArrayList.java:131) > at > org.apache.cayenne.ObjectContextDeleteAction.toCollection(ObjectContextDeleteAction.java:124) > at > org.apache.cayenne.ObjectContextDeleteAction.processDeleteRules(ObjectContextDeleteAction.java:153) > at > org.apache.cayenne.ObjectContextDeleteAction.deletePersistent(ObjectContextDeleteAction.java:112) > at > org.apache.cayenne.ObjectContextDeleteAction.performDelete(ObjectContextDeleteAction.java:91) > at org.apache.cayenne.BaseContext.deleteObjects(BaseContext.java:698) > at > com.proton.cayenne.utils.CayenneTemplate.deleteObject(CayenneTemplate.java:79) > at > com.proton.ks.services.business.HostingService.rejectUserRequestToDomain(SourceFile:413) > ... 120 more > Caused by: java.lang.InstantiationException > at > sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30) > at java.lang.reflect.Constructor.newInstance(Constructor.java:513) > at java.lang.Class.newInstance0(Class.java:355) > at java.lang.Class.newInstance(Class.java:308) > at > org.apache.cayenne.reflect.PersistentDescriptor.createObject(PersistentDescriptor.java:285) > ... 150 more > > In case it is not clear in the trace I am only doing a > context.deleteObjects(user) that user is cascading throught the model and in > some way hitting a SessionLogApi or SessionLogWeb which Cayenne treats as a > standard SessionLog and fails. > > I hope Andrus can help with this, at least with a way to circunvent the error > as the fix, if feasible, will take some time to arrive a Cayenne release > version. > > As always just ask for model, tests, or whatever as I am happy to provide > them. > > Thank you in advance and merry christmas >
