PK Generation and FrontBase

Jérémy DE ROYER <[email protected]>
Newsgroups gmane.comp.java.cayenne.user
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.