Its obvious now, sorry for wasting your time. getProvider is in parent and child.
On Wed, Sep 2, 2015 at 11:01 PM, Stephen Cameron <[email protected] > wrote: > OK, I pushed the current versions to Github. > > https://github.com/Stephen-Cameron-Data-Services/isis-chats.git > > If you start the app and create a new Activity (an ActivityEvent object) > from the main menu you will see the error. I have no tests independant of > the webapp sorry. > > I'll have to call it a day here soon, but it would be great if you could > have a quick look, just to see if something pops out for you that I am > missing. It must be something about that relationship specifically, its the > only one duplicated. > > > On Wed, Sep 2, 2015 at 10:51 PM, Stephen Cameron < > [email protected]> wrote: > >> I'll check in what I have now, but the issue is simply that an identical >> foreign key is being created twice for some reason. I thought it might be >> an artifact of there being two child tables. It had me confused as I didn't >> change much to what was working, including the relationship Activity to >> Provider. >> >> Here is the log, you can see activity_FK3 and activity_FK7 are the same: >> >> 22:16:33,740 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Execution Time = 1 ms >> 22:16:33,743 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Creating foreign key constraint : "activity_FK3" in catalog "" schema "" >> 22:16:33,743 [Schema 275150920@qtp-1846345504-0 DEBUG] >> ALTER TABLE "activity" ADD CONSTRAINT "activity_FK3" FOREIGN KEY >> ("provider_id_OID") REFERENCES "Provider" ("id") >> 22:16:33,745 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Execution Time = 2 ms >> 22:16:33,745 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Creating foreign key constraint : "activity_FK4" in catalog "" schema "" >> 22:16:33,745 [Schema 275150920@qtp-1846345504-0 DEBUG] >> ALTER TABLE "activity" ADD CONSTRAINT "activity_FK4" FOREIGN KEY >> ("region_region_OID") REFERENCES "Region" ("region") >> 22:16:33,746 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Execution Time = 1 ms >> 22:16:33,746 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Creating foreign key constraint : "activity_FK1" in catalog "" schema "" >> 22:16:33,746 [Schema 275150920@qtp-1846345504-0 DEBUG] >> ALTER TABLE "activity" ADD CONSTRAINT "activity_FK1" FOREIGN KEY >> ("activityType_name_OID") REFERENCES "ActivityType" ("name") >> 22:16:33,747 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Execution Time = 1 ms >> 22:16:33,747 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Creating foreign key constraint : "activity_FK2" in catalog "" schema "" >> 22:16:33,748 [Schema 275150920@qtp-1846345504-0 DEBUG] >> ALTER TABLE "activity" ADD CONSTRAINT "activity_FK2" FOREIGN KEY >> ("location_location_OID") REFERENCES "Location" ("location") >> 22:16:33,749 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Execution Time = 1 ms >> 22:16:33,749 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Creating foreign key constraint : "activity_FK7" in catalog "" schema "" >> 22:16:33,749 [Schema 275150920@qtp-1846345504-0 DEBUG] >> ALTER TABLE "activity" ADD CONSTRAINT "activity_FK7" FOREIGN KEY >> ("provider_id_OID") REFERENCES "Provider" ("id") >> 22:16:33,761 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Creating foreign key constraint : "activity_FK5" in catalog "" schema "" >> 22:16:33,761 [Schema 275150920@qtp-1846345504-0 DEBUG] >> ALTER TABLE "activity" ADD CONSTRAINT "activity_FK5" FOREIGN KEY >> ("parent_RecurringActivity_ID_OID") REFERENCES "RecurringActivity" >> ("RecurringActivity_ID") >> 22:16:33,763 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Execution Time = 2 ms >> 22:16:33,763 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Creating foreign key constraint : "activity_FK6" in catalog "" schema "" >> 22:16:33,763 [Schema 275150920@qtp-1846345504-0 DEBUG] >> ALTER TABLE "activity" ADD CONSTRAINT "activity_FK6" FOREIGN KEY >> ("parentActivity_RecurringActivity_ID_OID") REFERENCES "RecurringActivity" >> ("RecurringActivity_ID") >> 22:16:33,765 [Schema 275150920@qtp-1846345504-0 DEBUG] >> Execution Time = 2 ms >> >> On Wed, Sep 2, 2015 at 10:42 PM, Jeroen van der Wal <[email protected]> >> wrote: >> >>> Hi Stephen, you're leaving so much to guess. Can you put your code or >>> part >>> of it on github? >>> >>> Cheers, >>> >>> Jeroen >>> >>> On 2 September 2015 at 13:38, Stephen Cameron < >>> [email protected]> >>> wrote: >>> >>> > Hi again, >>> > >>> > I am back to trying to resolve my original issues, before being >>> sidetracked >>> > with the abstract class problem. I've not yet got a simple test case >>> for >>> > this, but will create one if no-one can give me a solution strait off. >>> > >>> > It seems as if foreign keys are being created twice. The stack trace is >>> > below. >>> > >>> > I have 4 tables now two abstract and two concrete, one abstract class >>> > extends the other and the two concrete classes extend the second >>> abstract >>> > ctype. >>> > >>> > These are: >>> > >>> > @PersistenceCapable() >>> > @Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE) >>> > @Discriminator(strategy=DiscriminatorStrategy.CLASS_NAME, >>> column="class") >>> > public abstract class AbstractChatsDomainEntity {...} >>> > >>> > @PersistenceCapable(table="activity") >>> > @Inheritance(strategy = InheritanceStrategy.NEW_TABLE) >>> > @Discriminator(strategy=DiscriminatorStrategy.CLASS_NAME, >>> column="class") >>> > public abstract class AbstractActivity extends >>> AbstractChatsDomainEntity >>> > implements Activity, Comparable<Activity> {...} >>> > >>> > @PersistenceCapable() >>> > @Inheritance(strategy = InheritanceStrategy.SUPERCLASS_TABLE) >>> > @DomainObject(objectType = "ACTIVITY") >>> > @DomainObjectLayout(bookmarking = BookmarkPolicy.AS_ROOT) >>> > public class ActivityEvent extends AbstractActivity implements >>> > CalendarEventable {...} >>> > >>> > @PersistenceCapable() >>> > @Inheritance(strategy = InheritanceStrategy.SUPERCLASS_TABLE) >>> > @DomainObject(objectType = "RECURRING_ACTIVITY") >>> > @DomainObjectLayout(bookmarking = BookmarkPolicy.AS_ROOT) >>> > public class RecurringActivity extends AbstractActivity {...} >>> > >>> > I'll remove one of these concrete classes temporarily and see what >>> happens. >>> > >>> > 21:17:28,766 [Datastore 421163163@qtp-899376395-0 ERROR] >>> An >>> > exception was thrown while adding/validating class(es) : a FOREIGN KEY >>> > constraint already exists on the set of columns: "activity_FK7" in >>> > statement [ALTER TABLE "activity" ADD CONSTRAINT "activity_FK7" >>> FOREIGN KEY >>> > ("provider_id_OID") REFERENCES "Provider" ("id") ] >>> > java.sql.SQLSyntaxErrorException: a FOREIGN KEY constraint already >>> exists >>> > on the set of columns: "activity_FK7" in statement [ALTER TABLE >>> "activity" >>> > ADD CONSTRAINT "activity_FK7" FOREIGN KEY ("provider_id_OID") >>> REFERENCES >>> > "Provider" ("id") ] >>> > at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) >>> > at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) >>> > at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) >>> > at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.datasource.dbcp.DelegatingStatement.execute(DelegatingStatement.java:246) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.datasource.dbcp.DelegatingStatement.execute(DelegatingStatement.java:246) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatement(AbstractTable.java:879) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.table.TableImpl.createForeignKeys(TableImpl.java:522) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.table.TableImpl.createConstraints(TableImpl.java:426) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:3443) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2880) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:119) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.RDBMSStoreManager.manageClasses(RDBMSStoreManager.java:1612) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.RDBMSStoreManager.getDatastoreClass(RDBMSStoreManager.java:675) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.RDBMSPersistenceHandler.getDatastoreClass(RDBMSPersistenceHandler.java:88) >>> > at >>> > >>> > >>> org.datanucleus.store.rdbms.RDBMSPersistenceHandler.insertObject(RDBMSPersistenceHandler.java:123) >>> > at >>> > >>> > >>> org.datanucleus.state.StateManagerImpl.internalMakePersistent(StateManagerImpl.java:3363) >>> > at >>> > >>> > >>> org.datanucleus.state.StateManagerImpl.makePersistent(StateManagerImpl.java:3339) >>> > at >>> > >>> > >>> org.datanucleus.ExecutionContextImpl.persistObjectInternal(ExecutionContextImpl.java:2066) >>> > at >>> > >>> > >>> org.datanucleus.ExecutionContextImpl.persistObjectWork(ExecutionContextImpl.java:1909) >>> > at >>> > >>> > >>> org.datanucleus.ExecutionContextImpl.persistObject(ExecutionContextImpl.java:1764) >>> > at >>> > >>> > >>> org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:720) >>> > at >>> > >>> > >>> org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:745) >>> > at >>> > >>> > >>> org.apache.isis.objectstore.jdo.datanucleus.persistence.commands.DataNucleusCreateObjectCommand.execute(DataNucleusCreateObjectCommand.java:54) >>> > at >>> > >>> > >>> org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.executeCommands(DataNucleusObjectStore.java:365) >>> > at >>> > >>> > >>> org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.execute(DataNucleusObjectStore.java:359) >>> > at >>> > >>> > >>> org.apache.isis.core.runtime.system.transaction.IsisTransaction.doFlush(IsisTransaction.java:527) >>> > at >>> > >>> > >>> org.apache.isis.core.runtime.system.transaction.IsisTransaction.flush(IsisTransaction.java:473) >>> > at >>> > >>> > >>> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.flushTransaction(IsisTransactionManager.java:392) >>> > at >>> > >>> > >>> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.executeActionOnTargetAndProcessResults(ActionPanel.java:249) >>> > at >>> > >>> > >>> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel.executeActionAndProcessResults(ActionPanel.java:193) >>> > at >>> > >>> > >>> org.apache.isis.viewer.wicket.ui.components.actions.ActionParametersFormPanel$ActionParameterForm$1.onSubmit(ActionParametersFormPanel.java:145) >>> > at >>> > >>> > >>> org.apache.wicket.ajax.markup.html.form.AjaxButton$1.onSubmit(AjaxButton.java:108) >>> > at >>> > >>> > >>> org.apache.wicket.ajax.form.AjaxFormSubmitBehavior$1.onSubmit(AjaxFormSubmitBehavior.java:182) >>> > at >>> > org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1266) >>> > at org.apache.wicket.markup.html.form.Form.process(Form.java:938) >>> > at >>> > org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:770) >>> > at >>> > >>> > >>> org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:159) >>> > at >>> > >>> > >>> org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:124) >>> > at >>> > >>> > >>> org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:633) >>> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>> > at >>> > >>> > >>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) >>> > at >>> > >>> > >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>> > at java.lang.reflect.Method.invoke(Method.java:497) >>> > at >>> > >>> > >>> org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258) >>> > at >>> > >>> > >>> org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241) >>> > at >>> > >>> > >>> org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:250) >>> > at >>> > >>> > >>> org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:236) >>> > at >>> > >>> > >>> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:862) >>> > at >>> > >>> > >>> org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) >>> > at >>> > >>> org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:261) >>> > at >>> > >>> > >>> org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:218) >>> > at >>> > >>> > >>> org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:289) >>> > at >>> > >>> > >>> org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:259) >>> > at >>> > >>> > >>> org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:201) >>> > at >>> > >>> > >>> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:282) >>> > at >>> > >>> > >>> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) >>> > at >>> > >>> > >>> org.apache.isis.core.webapp.diagnostics.IsisLogOnExceptionFilter.doFilter(IsisLogOnExceptionFilter.java:52) >>> > at >>> > >>> > >>> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) >>> > at >>> > >>> > >>> org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) >>> > at >>> > >>> > >>> org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) >>> > at >>> > >>> > >>> org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) >>> > at >>> > >>> > >>> org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) >>> > at >>> > >>> > >>> org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) >>> > at >>> > >>> > >>> org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) >>> > at >>> > >>> > >>> org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) >>> > at >>> > >>> > >>> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) >>> > at >>> > >>> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) >>> > at >>> > >>> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) >>> > at >>> > >>> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) >>> > at >>> > >>> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) >>> > at >>> > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) >>> > at >>> > >>> > >>> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) >>> > at >>> > >>> > >>> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) >>> > at >>> > >>> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) >>> > at org.mortbay.jetty.Server.handle(Server.java:326) >>> > at >>> > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) >>> > at >>> > >>> > >>> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945) >>> > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) >>> > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) >>> > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) >>> > at >>> > >>> > >>> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) >>> > at >>> > >>> > >>> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) >>> > Caused by: org.hsqldb.HsqlException: a FOREIGN KEY constraint already >>> > exists on the set of columns: "activity_FK7" >>> > at org.hsqldb.error.Error.error(Unknown Source) >>> > at org.hsqldb.error.Error.error(Unknown Source) >>> > at org.hsqldb.TableWorks.checkCreateForeignKey(Unknown Source) >>> > at org.hsqldb.TableWorks.addForeignKey(Unknown Source) >>> > at org.hsqldb.StatementSchema.getResult(Unknown Source) >>> > at org.hsqldb.StatementSchema.execute(Unknown Source) >>> > at org.hsqldb.Session.executeCompiledStatement(Unknown Source) >>> > at org.hsqldb.Session.executeDirectStatement(Unknown Source) >>> > at org.hsqldb.Session.execute(Unknown Source) >>> > ... 81 more >>> > >>> > >>> > On Wed, Sep 2, 2015 at 9:24 AM, Stephen Cameron < >>> > [email protected]> >>> > wrote: >>> > >>> > > >>> > > Hi >>> > > >>> > > Your solution ends up doing what mine does at the database schema >>> level. >>> > > >>> > > If Datanucleus supports it then shouldn't it be mostly be fine in >>> Isis? >>> > If >>> > > not then Isis should warn. >>> > > >>> > > I appreciate your help. >>> > > >>> > > >>> > > >>> > > >>> > > On Wed, Sep 2, 2015 at 4:58 AM, Jeroen van der Wal < >>> [email protected]> >>> > > wrote: >>> > > >>> > >> I've never used @PrimaryKey in an Isis application, don't know if >>> that >>> > >> works. My abstract class would typically look like this: >>> > >> >>> > >> @PersistenceCapable(identityType = IdentityType.DATASTORE) >>> > >> @DatastoreIdentity(column = "id", strategy = >>> > IdGeneratorStrategy.IDENTITY) >>> > >> @Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE) >>> > >> public abstract class AbstractParentType { >>> > >> >>> > >> private String name; >>> > >> >>> > >> @Column(allowsNull="true") >>> > >> @MemberOrder(sequence = "1") >>> > >> public String getName() { >>> > >> return name; >>> > >> } >>> > >> >>> > >> public void setName(final String name) { >>> > >> this.name = name; >>> > >> } >>> > >> >>> > >> } >>> > >> >>> > >> Hth >>> > >> >>> > >> On 1 September 2015 at 20:44, Jeroen van der Wal < >>> [email protected]> >>> > >> wrote: >>> > >> >>> > >> > If you make your abstract class public it should work fine ;-) >>> > >> > >>> > >> > Cheers, >>> > >> > >>> > >> > Jeroen >>> > >> > >>> > >> > On 1 September 2015 at 15:12, Stephen Cameron < >>> > >> [email protected]> >>> > >> > wrote: >>> > >> > >>> > >> >> Here a two scenarios each with a Parent and Child Type, they >>> should >>> > >> give >>> > >> >> the same result >>> > >> >> >>> > >> >> 1. Concrete Parent Type >>> > >> >> >>> > >> >> @PersistenceCapable() >>> > >> >> public class ConcreteParentType { >>> > >> >> >>> > >> >> @PrimaryKey() >>> > >> >> @Persistent(valueStrategy=IdGeneratorStrategy.INCREMENT) >>> > >> >> private Long id; >>> > >> >> >>> > >> >> private String name; >>> > >> >> >>> > >> >> @Column(allowsNull="true") >>> > >> >> @MemberOrder(sequence = "1") >>> > >> >> public String getName() { >>> > >> >> return name; >>> > >> >> } >>> > >> >> >>> > >> >> public void setName(final String name) { >>> > >> >> this.name = name; >>> > >> >> } >>> > >> >> >>> > >> >> } >>> > >> >> >>> > >> >> @PersistenceCapable() >>> > >> >> public class ChildTypeOfConcreteParentType extends >>> > ConcreteParentType { >>> > >> >> >>> > >> >> >>> > >> >> private String description; >>> > >> >> >>> > >> >> @Column(allowsNull="true") >>> > >> >> @MemberOrder(sequence = "2") >>> > >> >> public String getDescription() { >>> > >> >> return description; >>> > >> >> } >>> > >> >> >>> > >> >> public void setDescription(final String description) { >>> > >> >> this.description = description; >>> > >> >> } >>> > >> >> >>> > >> >> } >>> > >> >> >>> > >> >> 2. Abstract Parent Type >>> > >> >> >>> > >> >> @PersistenceCapable() >>> > >> >> @Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE) >>> > >> >> abstract class AbstractParentType { >>> > >> >> >>> > >> >> @PrimaryKey() >>> > >> >> @Persistent(valueStrategy=IdGeneratorStrategy.INCREMENT) >>> > >> >> private Long id; >>> > >> >> >>> > >> >> private String name; >>> > >> >> >>> > >> >> @Column(allowsNull="true") >>> > >> >> @MemberOrder(sequence = "1") >>> > >> >> public String getName() { >>> > >> >> return name; >>> > >> >> } >>> > >> >> >>> > >> >> public void setName(final String name) { >>> > >> >> this.name = name; >>> > >> >> } >>> > >> >> >>> > >> >> } >>> > >> >> >>> > >> >> @PersistenceCapable() >>> > >> >> public class ChildTypeOfAbstractParentType extends >>> > AbstractParentType { >>> > >> >> >>> > >> >> private String description; >>> > >> >> >>> > >> >> @Column(allowsNull="true") >>> > >> >> @MemberOrder(sequence = "2") >>> > >> >> public String getDescription() { >>> > >> >> return description; >>> > >> >> } >>> > >> >> >>> > >> >> public void setDescription(final String description) { >>> > >> >> this.description = description; >>> > >> >> } >>> > >> >> >>> > >> >> } >>> > >> >> >>> > >> >> In the seond scenario the name property doesn't appear, only the >>> > >> >> description. >>> > >> >> >>> > >> >> The DomainService class for testing these two scenarios in the >>> viewer >>> > >> is >>> > >> >> this: >>> > >> >> >>> > >> >> @DomainService(nature=NatureOfService.VIEW_MENU_ONLY) >>> > >> >> @DomainServiceLayout(named = "DataNucleus", menuBar = >>> > MenuBar.PRIMARY, >>> > >> >> menuOrder = "100") >>> > >> >> public class Menu { >>> > >> >> >>> > >> >> >>> > >> >> >>> > >> >> public ChildTypeOfConcreteParentType >>> > >> >> createChildTypeOfConcreteParentType() { >>> > >> >> ChildTypeOfConcreteParentType childType = null; >>> > >> >> try { >>> > >> >> childType = >>> > >> >> >>> container.newTransientInstance(ChildTypeOfConcreteParentType.class); >>> > >> >> childType.setName("ChildTypeOfConcreteParentType"); >>> > >> >> childType.setDescription("something descriptive"); >>> > >> >> container.persistIfNotAlready(childType); >>> > >> >> } catch (Exception e) { >>> > >> >> e.printStackTrace(); >>> > >> >> } >>> > >> >> return childType; >>> > >> >> } >>> > >> >> >>> > >> >> public ChildTypeOfAbstractParentType >>> > >> >> createChildTypeOfAbstractParentType() { >>> > >> >> ChildTypeOfAbstractParentType childType = null; >>> > >> >> try { >>> > >> >> childType = >>> > >> >> >>> container.newTransientInstance(ChildTypeOfAbstractParentType.class); >>> > >> >> childType.setName("ChildTypeOfAbstractParentType"); >>> > >> >> childType.setDescription("something descriptive"); >>> > >> >> container.persistIfNotAlready(childType); >>> > >> >> } catch (Exception e) { >>> > >> >> e.printStackTrace(); >>> > >> >> } >>> > >> >> return childType; >>> > >> >> } >>> > >> >> >>> > >> >> >>> > >> >> >>> > >> >> @javax.inject.Inject >>> > >> >> DomainObjectContainer container; >>> > >> >> >>> > >> >> } >>> > >> >> >>> > >> >> >>> > >> >> On Tue, Sep 1, 2015 at 10:42 PM, Stephen Cameron < >>> > >> >> [email protected] >>> > >> >> > wrote: >>> > >> >> >>> > >> >> > Hi Jeroen, just noticed this after sending second update >>> (winge). >>> > >> >> > >>> > >> >> > I'll send a test case now. >>> > >> >> > >>> > >> >> > On Tue, Sep 1, 2015 at 10:29 PM, Jeroen van der Wal < >>> > >> >> [email protected]> >>> > >> >> > wrote: >>> > >> >> > >>> > >> >> >> Hi Stephen, >>> > >> >> >> >>> > >> >> >> Can you share some code to support your case? >>> > >> >> >> >>> > >> >> >> Cheers, >>> > >> >> >> >>> > >> >> >> Jeroen >>> > >> >> >> >>> > >> >> >> On 1 September 2015 at 12:39, Stephen Cameron < >>> > >> >> [email protected] >>> > >> >> >> > >>> > >> >> >> wrote: >>> > >> >> >> >>> > >> >> >> > Hi, >>> > >> >> >> > >>> > >> >> >> > I've been trying today to find solutions to what seem to be >>> > >> >> Datanucleus >>> > >> >> >> > issues, but without much success. So rather than solve the >>> > >> problems >>> > >> >> >> created >>> > >> >> >> > in my refactoring of my application, which has been too hard >>> > >> frankly, >>> > >> >> >> I'm >>> > >> >> >> > trying to start afresh with some simple test cases, show >>> these >>> > >> work, >>> > >> >> >> then >>> > >> >> >> > add more complexity till I get where I want to be. >>> > >> >> >> > >>> > >> >> >> > So, I am starting this approach and I immediately have an >>> issue, >>> > >> but >>> > >> >> >> not a >>> > >> >> >> > Datanucleus one, I find that the value properties of an >>> abstract >>> > >> >> parent >>> > >> >> >> > class don't appear in the Wicket viewer, whereas they do if >>> the >>> > >> >> parent >>> > >> >> >> > class is concrete. Is this correct and if so what is the >>> reason? >>> > >> >> >> > >>> > >> >> >> > Thanks. >>> > >> >> >> > >>> > >> >> >> >>> > >> >> > >>> > >> >> > >>> > >> >> >>> > >> > >>> > >> > >>> > >> >>> > > >>> > > >>> > >>> >> >> >
