Choose benchmark test, operation and batch mode:

When one or more of the All filters is selected - only average normalized results are displayed. Please read Running and Results for more details.

Speed comparison of JPA database removal operations per second (higher is better)

 Derby
embedded
H2
embedded
HSQLDB
embedded
SQLite
embedded
DB4O
embedded
ObjectDB
embedded
Derby
server
H2
server
MySQL
server
PostgreSQL
server
ObjectDB
server
DataNucleus2,3402,6672,667 6.2 8292,0295891,920 
EclipseLink2,18915,05219,577failed  1,7373,6421653,676 
Hibernate1,9538,21711,69328.0  1,3102,6752873,374 
OpenJPA1,8708,20210,201   8272,2962272,840 
ObjectDB     35,424    12,362

Performance comparison chart - The Y-Axis represents normalized score in logarithmic scale - higher is better:
JPA performance benchmark comparision Hibernate, EclipseLink, OpenJPA, DataNucleus, ObjectDB

Performance comparison chart - The Y-Axis represents normalized score in linear scale - higher is better:
JPA performance benchmark comparision Hibernate, EclipseLink, OpenJPA, DataNucleus, ObjectDB

Best and Worst JPA/Database Performer in this comparison

The Most Efficient (the Fastest):

1. ObjectDB embedded100
2. EclipseLink with HSQLDB embedded55.3
3. EclipseLink with H2 embedded42.5
4. ObjectDB server34.9
5. Hibernate with HSQLDB embedded33.0
6. OpenJPA with HSQLDB embedded28.8
7. Hibernate with H2 embedded23.2
8. OpenJPA with H2 embedded23.2
9. EclipseLink with PostgreSQL server10.4
10. EclipseLink with H2 server10.3
11. Hibernate with PostgreSQL server9.5
12. OpenJPA with PostgreSQL server8.0
13. Hibernate with H2 server7.6
14. DataNucleus with HSQLDB embedded7.5
15. DataNucleus with H2 embedded7.5
16. DataNucleus with Derby embedded6.6
17. OpenJPA with H2 server6.5

The Least Efficient (the Slowest):

18. EclipseLink with Derby embedded6.2
19. DataNucleus with H2 server5.7
20. Hibernate with Derby embedded5.5
21. DataNucleus with PostgreSQL server5.4
22. OpenJPA with Derby embedded5.3
23. EclipseLink with Derby server4.9
24. Hibernate with Derby server3.7
25. DataNucleus with Derby server2.3
26. OpenJPA with Derby server2.3
27. DataNucleus with MySQL server1.7
28. Hibernate with MySQL server0.81
29. OpenJPA with MySQL server0.64
30. EclipseLink with MySQL server0.46
31. Hibernate with SQLite embedded0.079
32. DataNucleus with DB4O embedded0.017
33. EclipseLink with SQLite embedded0.0000

Problems (Exceptions) in these tests

  • EclipseLink with SQLite embedded
    Local Exception Stack: 
    Exception [EclipseLink-3002] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.ConversionException
    Exception Description: The object [-1,044,000,000], of class [class java.lang.Integer], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[lastLoginDate-->INDEXEDPERSON.LASTLOGINDATE]] with descriptor [RelationalDescriptor(org.jpab.index.IndexedPerson --> [DatabaseTable(INDEXEDPERSON)])], could not be converted to [class java.util.Date].
    	at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:71)
    	at org.eclipse.persistence.internal.helper.ConversionManager.convertObjectToUtilDate(ConversionManager.java:761)
    	at org.eclipse.persistence.internal.helper.ConversionManager.convertObject(ConversionManager.java:101)
    	at org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform.convertObject(DatasourcePlatform.java:157)
    	at org.eclipse.persistence.mappings.converters.TypeConversionConverter.convertDataValueToObjectValue(TypeConversionConverter.java:119)
    	at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.getAttributeValue(AbstractDirectMapping.java:675)
    	at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.valueFromRow(AbstractDirectMapping.java:1263)
    	at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.buildCloneFromRow(AbstractDirectMapping.java:1234)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoWorkingCopyClone(ObjectBuilder.java:1338)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneFromRow(ObjectBuilder.java:1466)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:558)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:502)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:454)
    	at org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:721)
    	at org.eclipse.persistence.queries.ReadAllQuery.registerResultInUnitOfWork(ReadAllQuery.java:723)
    	at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:420)
    	at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1074)
    	at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:736)
    	at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1034)
    	at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:380)
    	at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1112)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2909)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1247)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:479)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:714)
    	at org.jpab.Test.retireveEntities(Test.java:382)
    	at org.jpab.Test.doAction(Test.java:251)
    	at org.jpab.Runner$RemoveAction.run0(Runner.java:587)
    	at org.jpab.Runner$TestAction.run(Runner.java:517)
    	at java.lang.Thread.run(Thread.java:662)