DataNucleus
DataNucleus Performance Summary
The following charts show the performance of DataNucleus (in green) relatively to other JPA/DBMS combinations (in gray).
Position #1 on the X-Axis (the fastest) is about 100 times faster than position #33 (the slowest).
The configurations in which DataNucleus has been tested are listed in the following table:
Database + JPA Provider | Normalized Score 100 - Best, 0 - Worst | Final Position 1 - Best, 33 - Worst | Failed Tests | |
---|---|---|---|---|
1 | DataNucleus with H2 embedded | 7.8 | 13 (out of 33) | 4 |
2 | DataNucleus with HSQLDB embedded | 7.0 | 15 (out of 33) | 3 |
3 | DataNucleus with Derby embedded | 6.9 | 16 (out of 33) | 6 |
4 | DataNucleus with PostgreSQL server | 6.0 | 19 (out of 33) | 4 |
5 | DataNucleus with Derby server | 3.3 | 24 (out of 33) | 6 |
6 | DataNucleus with H2 server | 2.9 | 26 (out of 33) | 4 |
7 | DataNucleus with MySQL server | 2.1 | 29 (out of 33) | 5 |
8 | DataNucleus with DB4O embedded | 0.73 | 31 (out of 33) | 26 |
About DataNucleus
DataNucleus Access Platform (formerly JPOX) is a data management framework that implements the JPA and JDO specifications. It is more than just an object-relational mapping (ORM) because it can also map and manage data from sources other than relational databases (e.g. DB4O). DataNucleus also serves as the Java persistence layer in Google App Engine.
DataNucleus is available under the Apache open source license.
In this benchmark DataNucleus 3.0.7 (which was released in February 2012) has been tested.
DataNucleus Performance Tuning
The DataNucleus default configuration is far from being optimized. For example, unlike other JPA implementations, in DataNucleus connection pooling is disabled by default.
To get the best possible performance out of DataNucleus we followed the DataNucleus Performance Tuning instructions and applied the following optimizations:
- A connection pool (DBCP) was enabled.
-
EntityManagerFactory
was created only once per test. -
Every thread had its own private
EntityManager
. - Database schema generation was completed before time measurement started.
- Database schema validation was disabled.
- A discriminator was defined in the base class of a class hierarchy.
-
The
datanucleus.autoStartMechanism
property was set toNone
. -
The
datanucleus.rdbms.initializeColumnInfo
property was set toNone
. -
The
datanucleus.persistenceByReachabilityAtCommit
property was set tofalse
. -
The
datanucleus.manageRelationships
property was set tofalse
. - Logging was disabled.
All the entity classes have been enhanced by DataNucleus, by running
the tests with a Java Agent
(javaagent:datanucleus-enhancer-3.0.1.jar).
Class enhancement time was completely excluded from the test time measurement.
Solved Problems and Issues
The stack traces below demonstrate some exceptions that have been thrown when using DataNucleus in previous runs of this benchmark and have been fixed by upgrading software and setting.
javax.persistence.RollbackException: Transaction failed to commit at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:120) at org.jpab.Test.persist(Test.java:217) at org.jpab.Test.persist(Test.java:200) at org.jpab.Runner$PersistAction.run0(Runner.java:529) at org.jpab.Runner$TestAction.run(Runner.java:508) at java.lang.Thread.run(Thread.java:619) Caused by: javax.persistence.PersistenceException: Error(s) were found while auto-creating/validating the datastore for classes. The errors are printed in the log, and are attached to this exception. at org.datanucleus.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:244) at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:118) ... 5 more Caused by: java.sql.SQLSyntaxErrorException: In an ALTER TABLE statement, the column 'LOGINCOUNT' has been specified as NOT NULL and either the DEFAULT clause was not specified or was specified as DEFAULT NULL. at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source) at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source) at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source) at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:261) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatement(AbstractTable.java:730) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatementList(AbstractTable.java:681) at org.datanucleus.store.rdbms.table.TableImpl.validateColumns(TableImpl.java:263) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:2745) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.addClassTablesAndValidate(RDBMSStoreManager.java:2546) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2191) at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:113) at org.datanucleus.store.rdbms.RDBMSStoreManager.addClasses(RDBMSStoreManager.java:966) at org.datanucleus.store.AbstractStoreManager.addClass(AbstractStoreManager.java:914) at org.datanucleus.store.mapped.MappedStoreManager.getDatastoreClass(MappedStoreManager.java:356) at org.datanucleus.store.rdbms.RDBMSPersistenceHandler.insertObject(RDBMSPersistenceHandler.java:113) at org.datanucleus.jdo.state.JDOStateManagerImpl.internalMakePersistent(JDOStateManagerImpl.java:3273) at org.datanucleus.jdo.state.JDOStateManagerImpl.flush(JDOStateManagerImpl.java:4664) at org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3156) at org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:3096) at org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:3235) at org.datanucleus.ObjectManagerImpl$2.transactionPreCommit(ObjectManagerImpl.java:316) at org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:394) at org.datanucleus.TransactionImpl.commit(TransactionImpl.java:279) at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:106) ... 5 more Caused by: java.sql.SQLException: In an ALTER TABLE statement, the column 'LOGINCOUNT' has been specified as NOT NULL and either the DEFAULT clause was not specified or was specified as DEFAULT NULL. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source) ... 34 more Caused by: ERROR 42601: In an ALTER TABLE statement, the column 'LOGINCOUNT' has been specified as NOT NULL and either the DEFAULT clause was not specified or was specified as DEFAULT NULL. at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.sql.compile.ColumnDefinitionNode.bindAndValidateDefault(Unknown Source) at org.apache.derby.impl.sql.compile.TableElementList.validate(Unknown Source) at org.apache.derby.impl.sql.compile.AlterTableNode.bindStatement(Unknown Source) at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source) at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source) at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source) ... 28 more
An exception was thrown while adding/validating class(es) : object name already exists: COLLECTIONPERSON_STRING in statement [CREATE TABLE COLLECTIONPERSON_STRING ( COLLECTIONPERSON_ID INTEGER NOT NULL, PHONES_ELEMENT VARCHAR(255) NULL )] java.sql.SQLException: object name already exists: COLLECTIONPERSON_STRING in statement [CREATE TABLE COLLECTIONPERSON_STRING ( COLLECTIONPERSON_ID INTEGER NOT NULL, PHONES_ELEMENT VARCHAR(255) NULL )] at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:261) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatement(AbstractTable.java:730) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatementList(AbstractTable.java:681) at org.datanucleus.store.rdbms.table.AbstractTable.create(AbstractTable.java:402) at org.datanucleus.store.rdbms.table.AbstractTable.exists(AbstractTable.java:458) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:2732) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.addClassTablesAndValidate(RDBMSStoreManager.java:2546) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2191) at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:113) at org.datanucleus.store.rdbms.RDBMSStoreManager.addClasses(RDBMSStoreManager.java:966) at org.datanucleus.store.AbstractStoreManager.addClass(AbstractStoreManager.java:914) at org.datanucleus.store.mapped.MappedStoreManager.getDatastoreClass(MappedStoreManager.java:356) at org.datanucleus.store.rdbms.query.RDBMSQueryUtils.getStatementForCandidates(RDBMSQueryUtils.java:298) at org.datanucleus.store.rdbms.query.JPQLQuery.compileQueryFull(JPQLQuery.java:745) at org.datanucleus.store.rdbms.query.JPQLQuery.compileInternal(JPQLQuery.java:249) at org.datanucleus.store.query.Query.setImplicitParameter(Query.java:736) at org.datanucleus.store.rdbms.query.JPQLQuery.setImplicitParameter(JPQLQuery.java:136) at org.datanucleus.jpa.JPAQuery.setParameter(JPAQuery.java:390) at org.datanucleus.jpa.JPAQuery.setParameter(JPAQuery.java:53) at org.jpab.Test.retireveEntities(Test.java:380) at org.jpab.Test.doAction(Test.java:251) at org.jpab.Runner$RemoveAction.run0(Runner.java:578) at org.jpab.Runner$TestAction.run(Runner.java:508) at java.lang.Thread.run(Thread.java:619) Caused by: org.hsqldb.HsqlException: object name already exists: COLLECTIONPERSON_STRING at org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.SchemaObjectSet.checkAdd(Unknown Source) at org.hsqldb.SchemaManager.checkSchemaObjectNotExists(Unknown Source) at org.hsqldb.StatementSchema.setOrCheckObjectName(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) ... 26 more org.datanucleus.exceptions.NucleusDataStoreException: An exception was thrown while adding/validating class(es) : object name already exists: COLLECTIONPERSON_STRING in statement [CREATE TABLE COLLECTIONPERSON_STRING ( COLLECTIONPERSON_ID INTEGER NOT NULL, PHONES_ELEMENT VARCHAR(255) NULL )] java.sql.SQLException: object name already exists: COLLECTIONPERSON_STRING in statement [CREATE TABLE COLLECTIONPERSON_STRING ( COLLECTIONPERSON_ID INTEGER NOT NULL, PHONES_ELEMENT VARCHAR(255) NULL )] at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:261) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatement(AbstractTable.java:730) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatementList(AbstractTable.java:681) at org.datanucleus.store.rdbms.table.AbstractTable.create(AbstractTable.java:402) at org.datanucleus.store.rdbms.table.AbstractTable.exists(AbstractTable.java:458) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:2732) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.addClassTablesAndValidate(RDBMSStoreManager.java:2546) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2191) at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:113) at org.datanucleus.store.rdbms.RDBMSStoreManager.addClasses(RDBMSStoreManager.java:966) at org.datanucleus.store.AbstractStoreManager.addClass(AbstractStoreManager.java:914) at org.datanucleus.store.mapped.MappedStoreManager.getDatastoreClass(MappedStoreManager.java:356) at org.datanucleus.store.rdbms.query.RDBMSQueryUtils.getStatementForCandidates(RDBMSQueryUtils.java:298) at org.datanucleus.store.rdbms.query.JPQLQuery.compileQueryFull(JPQLQuery.java:745) at org.datanucleus.store.rdbms.query.JPQLQuery.compileInternal(JPQLQuery.java:249) at org.datanucleus.store.query.Query.setImplicitParameter(Query.java:736) at org.datanucleus.store.rdbms.query.JPQLQuery.setImplicitParameter(JPQLQuery.java:136) at org.datanucleus.jpa.JPAQuery.setParameter(JPAQuery.java:390) at org.datanucleus.jpa.JPAQuery.setParameter(JPAQuery.java:53) at org.jpab.Test.retireveEntities(Test.java:380) at org.jpab.Test.doAction(Test.java:251) at org.jpab.Runner$RemoveAction.run0(Runner.java:578) at org.jpab.Runner$TestAction.run(Runner.java:508) at java.lang.Thread.run(Thread.java:619) Caused by: org.hsqldb.HsqlException: object name already exists: COLLECTIONPERSON_STRING at org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.SchemaObjectSet.checkAdd(Unknown Source) at org.hsqldb.SchemaManager.checkSchemaObjectNotExists(Unknown Source) at org.hsqldb.StatementSchema.setOrCheckObjectName(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) ... 26 more at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.addClassTablesAndValidate(RDBMSStoreManager.java:2569) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2191) at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:113) at org.datanucleus.store.rdbms.RDBMSStoreManager.addClasses(RDBMSStoreManager.java:966) at org.datanucleus.store.AbstractStoreManager.addClass(AbstractStoreManager.java:914) at org.datanucleus.store.mapped.MappedStoreManager.getDatastoreClass(MappedStoreManager.java:356) at org.datanucleus.store.rdbms.query.RDBMSQueryUtils.getStatementForCandidates(RDBMSQueryUtils.java:298) at org.datanucleus.store.rdbms.query.JPQLQuery.compileQueryFull(JPQLQuery.java:745) at org.datanucleus.store.rdbms.query.JPQLQuery.compileInternal(JPQLQuery.java:249) at org.datanucleus.store.query.Query.setImplicitParameter(Query.java:736) at org.datanucleus.store.rdbms.query.JPQLQuery.setImplicitParameter(JPQLQuery.java:136) at org.datanucleus.jpa.JPAQuery.setParameter(JPAQuery.java:390) at org.datanucleus.jpa.JPAQuery.setParameter(JPAQuery.java:53) at org.jpab.Test.retireveEntities(Test.java:380) at org.jpab.Test.doAction(Test.java:251) at org.jpab.Runner$RemoveAction.run0(Runner.java:578) at org.jpab.Runner$TestAction.run(Runner.java:508) at java.lang.Thread.run(Thread.java:619) Caused by: java.sql.SQLException: object name already exists: COLLECTIONPERSON_STRING in statement [CREATE TABLE COLLECTIONPERSON_STRING ( COLLECTIONPERSON_ID INTEGER NOT NULL, PHONES_ELEMENT VARCHAR(255) NULL )] at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:261) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatement(AbstractTable.java:730) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatementList(AbstractTable.java:681) at org.datanucleus.store.rdbms.table.AbstractTable.create(AbstractTable.java:402) at org.datanucleus.store.rdbms.table.AbstractTable.exists(AbstractTable.java:458) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:2732) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.addClassTablesAndValidate(RDBMSStoreManager.java:2546) ... 17 more Caused by: org.hsqldb.HsqlException: object name already exists: COLLECTIONPERSON_STRING at org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.SchemaObjectSet.checkAdd(Unknown Source) at org.hsqldb.SchemaManager.checkSchemaObjectNotExists(Unknown Source) at org.hsqldb.StatementSchema.setOrCheckObjectName(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) ... 26 more Nested Throwables StackTrace: java.sql.SQLException: object name already exists: COLLECTIONPERSON_STRING in statement [CREATE TABLE COLLECTIONPERSON_STRING ( COLLECTIONPERSON_ID INTEGER NOT NULL, PHONES_ELEMENT VARCHAR(255) NULL )] at org.hsqldb.jdbc.Util.sqlException(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source) at org.hsqldb.jdbc.JDBCStatement.execute(Unknown Source) at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:261) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatement(AbstractTable.java:730) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatementList(AbstractTable.java:681) at org.datanucleus.store.rdbms.table.AbstractTable.create(AbstractTable.java:402) at org.datanucleus.store.rdbms.table.AbstractTable.exists(AbstractTable.java:458) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:2732) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.addClassTablesAndValidate(RDBMSStoreManager.java:2546) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2191) at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:113) at org.datanucleus.store.rdbms.RDBMSStoreManager.addClasses(RDBMSStoreManager.java:966) at org.datanucleus.store.AbstractStoreManager.addClass(AbstractStoreManager.java:914) at org.datanucleus.store.mapped.MappedStoreManager.getDatastoreClass(MappedStoreManager.java:356) at org.datanucleus.store.rdbms.query.RDBMSQueryUtils.getStatementForCandidates(RDBMSQueryUtils.java:298) at org.datanucleus.store.rdbms.query.JPQLQuery.compileQueryFull(JPQLQuery.java:745) at org.datanucleus.store.rdbms.query.JPQLQuery.compileInternal(JPQLQuery.java:249) at org.datanucleus.store.query.Query.setImplicitParameter(Query.java:736) at org.datanucleus.store.rdbms.query.JPQLQuery.setImplicitParameter(JPQLQuery.java:136) at org.datanucleus.jpa.JPAQuery.setParameter(JPAQuery.java:390) at org.datanucleus.jpa.JPAQuery.setParameter(JPAQuery.java:53) at org.jpab.Test.retireveEntities(Test.java:380) at org.jpab.Test.doAction(Test.java:251) at org.jpab.Runner$RemoveAction.run0(Runner.java:578) at org.jpab.Runner$TestAction.run(Runner.java:508) at java.lang.Thread.run(Thread.java:619) Caused by: org.hsqldb.HsqlException: object name already exists: COLLECTIONPERSON_STRING at org.hsqldb.error.Error.error(Unknown Source) at org.hsqldb.SchemaObjectSet.checkAdd(Unknown Source) at org.hsqldb.SchemaManager.checkSchemaObjectNotExists(Unknown Source) at org.hsqldb.StatementSchema.setOrCheckObjectName(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) ... 26 more
javax.persistence.RollbackException: Transaction failed to commit at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:120) at org.jpab.Test.persist(Test.java:217) at org.jpab.Test.persist(Test.java:200) at org.jpab.Runner$PersistAction.run0(Runner.java:529) at org.jpab.Runner$TestAction.run(Runner.java:508) at java.lang.Thread.run(Thread.java:619) Caused by: javax.persistence.PersistenceException: Error(s) were found while auto-creating/validating the datastore for classes. The errors are printed in the log, and are attached to this exception. at org.datanucleus.jpa.NucleusJPAHelper.getJPAExceptionForNucleusException(NucleusJPAHelper.java:244) at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:118) ... 5 more Caused by: java.sql.SQLSyntaxErrorException: In an ALTER TABLE statement, the column 'LOGINCOUNT' has been specified as NOT NULL and either the DEFAULT clause was not specified or was specified as DEFAULT NULL. at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) at org.apache.derby.client.am.Statement.execute(Unknown Source) at org.apache.commons.dbcp.DelegatingStatement.execute(DelegatingStatement.java:261) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatement(AbstractTable.java:730) at org.datanucleus.store.rdbms.table.AbstractTable.executeDdlStatementList(AbstractTable.java:681) at org.datanucleus.store.rdbms.table.TableImpl.validateColumns(TableImpl.java:263) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.performTablesValidation(RDBMSStoreManager.java:2745) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.addClassTablesAndValidate(RDBMSStoreManager.java:2546) at org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2191) at org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:113) at org.datanucleus.store.rdbms.RDBMSStoreManager.addClasses(RDBMSStoreManager.java:966) at org.datanucleus.store.AbstractStoreManager.addClass(AbstractStoreManager.java:914) at org.datanucleus.store.mapped.MappedStoreManager.getDatastoreClass(MappedStoreManager.java:356) at org.datanucleus.store.rdbms.RDBMSPersistenceHandler.insertObject(RDBMSPersistenceHandler.java:113) at org.datanucleus.jdo.state.JDOStateManagerImpl.internalMakePersistent(JDOStateManagerImpl.java:3273) at org.datanucleus.jdo.state.JDOStateManagerImpl.flush(JDOStateManagerImpl.java:4664) at org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:3156) at org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:3096) at org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:3235) at org.datanucleus.ObjectManagerImpl$2.transactionPreCommit(ObjectManagerImpl.java:316) at org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:394) at org.datanucleus.TransactionImpl.commit(TransactionImpl.java:279) at org.datanucleus.jpa.EntityTransactionImpl.commit(EntityTransactionImpl.java:106) ... 5 more Caused by: org.apache.derby.client.am.SqlException: In an ALTER TABLE statement, the column 'LOGINCOUNT' has been specified as NOT NULL and either the DEFAULT clause was not specified or was specified as DEFAULT NULL. at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source) at org.apache.derby.client.am.Statement.completeExecuteImmediate(Unknown Source) at org.apache.derby.client.net.NetStatementReply.parseEXCSQLIMMreply(Unknown Source) at org.apache.derby.client.net.NetStatementReply.readExecuteImmediate(Unknown Source) at org.apache.derby.client.net.StatementReply.readExecuteImmediate(Unknown Source) at org.apache.derby.client.net.NetStatement.readExecuteImmediate_(Unknown Source) at org.apache.derby.client.am.Statement.readExecuteImmediate(Unknown Source) at org.apache.derby.client.am.Statement.flowExecute(Unknown Source) at org.apache.derby.client.am.Statement.executeX(Unknown Source) ... 27 more