Hi all, I’m trying to find a solution for the (temporary ?) lack of horizontal inheritance so I did model vertical inheritance following :
https://cayenne.apache.org/docs/3.0/modeling-vertical-inheritance.html using a Frontbase database. I did : - create the model, - generate the database, - fix lack of jars and other things like username, password, jdbc driver The demo code below starts well and connects to database... try { ServerRuntime cayenneRuntime = ServerRuntime.builder() .addConfig("cayenne-CayenneTest.xml") .build(); ObjectContext context = cayenneRuntime.newContext(); Book _newBook = context.newObject(Book.class); _newBook.setTitle("Nouveau Book"); _newBook.setCreated(new Date()); context.commitChanges(); EBook _newEBook = context.newObject(EBook.class); _newEBook.setTitle("Nouveau EBook"); _newEBook.setCreated(new Date()); _newEBook.setDownloadUrl("https://www.google.fr/"); context.commitChanges(); PaperBook _newPaperBook = context.newObject(PaperBook.class); _newPaperBook.setTitle("Nouveau PaperBook"); _newPaperBook.setCreated(new Date()); _newPaperBook.setShippingWeight(1000); context.commitChanges(); List<Book> _books = ObjectSelect.query(Book.class).select(context); System.out.println("** ALL **"); for (Book currentBook : _books) { System.out.println(currentBook.getTitle() + " created on " + currentBook.getCreated()); } } catch (Exception e) { System.out.println("An error occured : " + e.getMessage()); e.printStackTrace(); } …but throws this exception An error occured : [v.4.1 Jul 14 2020 10:40:45] Commit Exception org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020 10:40:45] Commit Exception at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774) at org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691) at your.app.Application.<init>(Application.java:50) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at com.webobjects.appserver.WOApplication.main(WOApplication.java:547) at your.app.Application.main(Application.java:25) Caused by: java.lang.NullPointerException at org.apache.cayenne.access.jdbc.SQLTemplateAction.execute(SQLTemplateAction.java:242) at org.apache.cayenne.access.jdbc.SQLTemplateAction.runWithNamedParametersBatch(SQLTemplateAction.java:179) at org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:111) at org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:97) at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273) at org.apache.cayenne.dba.frontbase.FrontBasePkGenerator.longPkFromDatabase(FrontBasePkGenerator.java:143) at org.apache.cayenne.dba.JdbcPkGenerator.generatePk(JdbcPkGenerator.java:220) at org.apache.cayenne.access.DataDomainInsertBucket.createPermIds(DataDomainInsertBucket.java:168) at org.apache.cayenne.access.DataDomainInsertBucket.appendQueriesInternal(DataDomainInsertBucket.java:76) at org.apache.cayenne.access.DataDomainSyncBucket.appendQueries(DataDomainSyncBucket.java:78) at org.apache.cayenne.access.DataDomainFlushAction.preprocess(DataDomainFlushAction.java:185) at org.apache.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushAction.java:143) at org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:624) at org.apache.cayenne.access.DataDomain.onSyncNoFilters(DataDomain.java:594) at org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:822) at org.apache.cayenne.tx.TransactionFilter.lambda$onSync$0(TransactionFilter.java:61) at org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInTransaction(DefaultTransactionManager.java:183) at org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInNewTransaction(DefaultTransactionManager.java:155) at org.apache.cayenne.tx.DefaultTransactionManager$NestedTransactionHandler.handle(DefaultTransactionManager.java:98) at org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:65) at org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:43) at org.apache.cayenne.tx.TransactionFilter.onSync(TransactionFilter.java:61) at org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:821) at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:581) at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:742) ... 9 more It seem’s to be related to pk generation so I try a select unqiue from Book in FrontBase and it worked lije a charm. Any idea ? Many thank’s, Jérémy