DataNucleus AccessPlatform 4.1 Release Notes

The 4.1 release of AccessPlatform is available under the Apache 2 license from our download page

Version 4.1 includes the following over 4.0

  • Rewrite SCO "update" initialisation to cater for cascade delete and optimisation.

  • Extend 'operation queue' to include persist, update, remove operations

  • Minor upgrade to bytecode enhancement contract to allow for separation of enhancement API

  • Rewrite of handling of container field update code.

  • Types : support for Jodatime LocalDateTime

  • JDO : PersistenceManager and Query implementations now implement AutoCloseable

  • JDO : Ability to save a query as a "named" query, for later access

  • JDO : support for JDOQL subqueries in SELECT clause

  • JPA : support for non-standard value generators

  • JPA : support for "KEY", "VALUE" keywords in JPQL

  • JPA : support for parameters in FROM "ON" clause of JPQL

  • JPA : support for JPQL subqueries in SELECT and HAVING clauses

  • JPA : support for JPQL ordering by result alias

  • JPA : support for JPQL "RIGHT OUTER JOIN"

  • JPA : support for AttributeConverters on map key/value and collection element

  • JPA : Ability to save a query as a "named" query, for later access

  • REST : support for map/array fields

  • REST : support for maxFetchDepth on GET requests

  • REST : support for GZIP compression on GET requests

  • MongoDB : much improved relation handling, and support for date and interface fields.

  • RDBMS : support for some HikariCP connection pool properties

  • RDBMS : support for SQL Anywhere

  • Persistent Properties : you can now use inheritance in persistent properties, overriding getters etc

No further releases planned; commercial enquiries required.

DataNucleus AccessPlatform 4.1.17

Feb 5th 2017 : Version 4.1.17 includes the following changes



  • datanucleus-core-176 - TRIM handling for JPQL doesn’t cater for multiple component identifiers

  • datanucleus-rdbms-160 - Query with multiple roots when using same type as candidate fails to register the alias of the secondary root

DataNucleus AccessPlatform 4.1.16

Dec 10th 2016 : Version 4.1.16 includes the following changes



DataNucleus AccessPlatform 4.1.15

Nov 19th 2016 : Version 4.1.15 includes the following changes



DataNucleus AccessPlatform 4.1.14

Sep 20th 2016 : Version 4.1.14 includes the following changes



  • datanucleus-core-133 - Use of ObjectId with "PersistableIdentity" doesn’t retrieve correctly

  • datanucleus-rdbms-103 - pm.getObjectById(Class, id) or em.find(Class, id) with COMPLETE-TABLE can throw exception

  • datanucleus-rdbms-116 - If we have generic (abstract) root class, then abstract subclass specifying generic type, then concrete class fails to pick up the override of generic type

DataNucleus AccessPlatform 4.1.13

Aug 25th 2016 : Version 4.1.13 includes the following changes



DataNucleus AccessPlatform 4.1.12

Aug 2nd 2016 : Version 4.1.12 includes the following changes



DataNucleus AccessPlatform 4.1.11

Jun 6th 2016 : Version 4.1.11 includes the following changes



  • datanucleus-core-68 - OperationQueue : performAll for backing store should only process for the specified ObjectProvider

  • datanucleus-core-76 - CompleteClassTable : mark embedded PK columns as being part of PK

  • datanucleus-core-78 - NamingFactory do not cater for unique index name for DISCRIMINATOR_COLUMN

  • datanucleus-api-jdo-15 - Bean Validation : don’t fire off validation on prePersist and preStore, just on one

  • datanucleus-api-jpa-23 - Criteria in(…​).not() is ignoring the NOT in the generic compilation (and generated SQL)

  • datanucleus-api-jpa-20 - Bean Validation : don’t fire off validation on prePersist and preStore, just on one

  • datanucleus-rdbms-49 - Bulk fetch has bug when trying to handle array case, assumes it is a Collection resulting in NPE

DataNucleus AccessPlatform 4.1.10

Apr 7th 2016 : Version 4.1.10 includes the following changes

New Feature

  • NUCCORE-1399 - Add mechanism whereby if there is metadata for a class that is not in the classpath we can just ignore it

  • NUCMAVEN-52 - Support "datanucleus.metadata.ignoreMetaDataForMissingClasses" via enhancer


  • NUCCORE-1389 - java.awt.Color should be in DFG


  • NUCCORE-1391 - SerializableByteBufferConverter should use wrap/remaining to convert to bytes but doesn’t

  • NUCJPA-332 - If metadata specified using orm.xml only, the entity name is not defaulted

  • NUCJPA-333 - Criteria multiple join with no join alias results in exception

  • NUCJPA-334 - Criteria join to a multiple valued path doesn’t work.

  • NUCRDBMS-1013 - JPQL : join to embedded object generates incorrect SQL

  • NUCRDBMS-1017 - Insert of array of persistable objects fails to insert join table when cascade not enabled

DataNucleus AccessPlatform 4.1.9

Feb 20th 2016 : Version 4.1.9 includes the following changes


  • NUCCORE-1368 - List of "simple" result classes is very restrictive. Extend to include other commonly used "simple" classes

  • NUCCORE-1385 - Query parsing can be improved to better cater for quoting and end of line characters

  • NUCREST-25 - Remove use of NucleusException

  • NUCREST-26 - Change "jdoql" / "jpql" modes so that they take parameter "query" with the encoded query

  • NUCRDBMS-1001 - Oracle supports NVARCHAR but JDBC driver doesn’t acknowledge it


  • NUCCORE-1372 - Nondurable classes should not be L2 cached, ever.

  • NUCCORE-1379 - Dont log about AutoStartMechanism if set to None

  • NUCRDBMS-998 - Prevent SortedSet (and subclasses) be allocated a ListXXXStore since needs unsorted

  • NUCRDBMS-1007 - Apparently need a call to ConnectionFactory.setPool() to avoid log message with DBCP2


  • NUCRDBMS-1009 - Parameters in group by expressions are not set on the JDBC statement

DataNucleus AccessPlatform 4.1.8

Jan 13th 2016 : Version 4.1.8 includes the following changes


  • NUCRDBMS-991 - Support for fetch of ReferenceMapping field when there is a single implementation and using FK


  • NUCCORE-1366 - AbstractMemberMetaData.getClassName(false) can return fully qualified name in some situations

  • NUCJPA-329 - JPA MetaModel doesn’t cater correctly for List<nonPC>, and sets to CollectionAttributeImpl instead of ListAttributeImpl

  • NUCRDBMS-990 - Loading of interface field with single implementation with version field is not loading the version

  • NUCRDBMS-992 - Name of candidate key (unique) on join table is not respected

  • NUCRDBMS-995 - TypeConverterMapping.getJavaType is incorrect when roleForMember is set

DataNucleus AccessPlatform 4.1.7

Nov 27th 2015 : Version 4.1.7 includes the following changes

New Feature

  • NUCCORE-1358 - Allow JPQL to exclude subclasses of the candidate

  • NUCRDBMS-983 - Support SAP "SQLAnywhere"


  • NUCCORE-1347 - ClassMetaData has "members" that should be genericised to AbstractMemberMetaData, and lookup of member name improved

  • NUCCORE-1359 - Determine Collection element and Map key/value type from TypeVariable when using ParametrizedType within ParameterizedType

  • NUCCORE-1363 - CompleteClassTable : has check on duplicated column name, but that should not apply when supporting "nested" embedded


  • NUCCORE-1360 - Support PK field conversions for types Currency, TimeZone, UUID

  • NUCJAVAEIGHT-20 - InstantTimestampConverter : use convenience methods to do the conversion

  • NUCMONGODB-165 - Make sure "ownerMmd" is set for FetchFieldManager when embedded, add TODO to resolve

  • NUCJDOQUERY-22 - Add support for TypeVariables


  • NUCCORE-1362 - Persistable elements contained in Collection/Map that is serialised (whole field) are not detached/attached correctly

  • NUCRDBMS-981 - Support NUCCORE-1362

  • NUCRDBMS-985 - SELECT statement generation handling of ordering when multiple cols per order expression should apply quoting as final step but doesnt

  • NUCRDBMS-986 - Creation of mapping in some cases misses the MultiColumnConverter case and doesnt use TypeConverterMultiMapping

DataNucleus AccessPlatform 4.1.6

Nov 16th 2015 : Version 4.1.6 includes the following changes

New Feature

  • NUCRDBMS-970 - SQLStatement needs a way of generation where we don’t use table aliases, and just use table names

  • NUCRDBMS-977 - Support persisting a Collection/Map using a TypeConverter for the whole field


  • NUCRDBMS-971 - SQLite doesn’t provide explicit support for putting nulls last, but can use "{col} IS NULL, {col}"

  • NUCRDBMS-972 - View creation : skip any token that is a "comment" since some RDBMS don’t handle that

  • NUCRDBMS-973 - Delete tables processing : goes off and calls DatabaseMetaData.getColumns for detection of table existence but could just get table type (quicker!)


  • NUCJPA-322 - Support AttributeConverter on a collection field to be for the whole field not just the element

  • NUCRDBMS-975 - Provide access to RDBMSQueryCompilation, and to the SQLStatement(s) that the compilation is made up of.


  • NUCCORE-1355 - JPQLSingleStringParser has missing trimRight handling (typo in trimLeft)

  • NUCCORE-1356 - Metadata processing moves ColumnMetaData to ElementMetaData is not embedded/serialised but should also allow for full field type converter case

  • NUCRDBMS-974 - Oracle, Firebird require that when using GROUP BY, all non-aggregate SELECT components are in the GROUP BY clause

DataNucleus AccessPlatform 4.1.5

Oct 18th 2015 : Version 4.1.5 includes the following changes

New Feature

  • NUCCORE-1350 - Extend NUCCORE-1344 to allow LEFT JOIN FETCH

  • NUCRDBMS-944 - Support polymorphic joins when using UNION, so only apply to particular UNIONs

  • NUCRDBMS-954 - MySQL : allow setting the COLLATION and CHARACTER SET of any tables that are created

  • NUCRDBMS-958 - Firebird supports date functions using EXTRACT(…​)


  • NUCRDBMS-951 - Index auto creation : detect reuse of fields so we don’t try to duplicate indexes

  • NUCRDBMS-945 - SQLStatement needs more flexibility with joins; apply to just one union, pass in join type

  • NUCRDBMS-952 - SchemaTool : delete of schema for classes can try to validate the tables structure before dropping, but should just drop the tables if present

  • NUCRDBMS-955 - Firebird v2 requires use of CHAR_LENGTH for length of VARCHAR fields

  • NUCRDBMS-959 - MySQL doesn’t support "NULLS FIRST | LAST" but does allow ISNULL(…​) extra clause to put nulls last (default is first)

  • NUCRDBMS-962 - Candidate key auto creation : detect reuse of fields so we don’t try to duplicate uniques

  • NUCRDBMS-963 - HSQLDB v2+ doesn’t have LONGVARBINARY, so need to provide own mapping


  • NUCRDBMS-946 - Add RIGHT_OUTER_JOIN as option in DatastoreAdapter that can be unsupported (SQLite)

  • NUCRDBMS-949 - Support date/time methods on SQLite

  • NUCRDBMS-957 - Firebird v2 requires use of SUBSTRING for substring of VARCHAR fields

  • NUCRDBMS-967 - SQLite doesn’t support "ALL|ANY|SOME {subquery}" keyword constructs, so throw exception

  • NUCRDBMS-968 - SQLite LOCATE / String.indexOf should use INSTR(x,y) rather than LOCATE

  • NUCRDBMS-969 - SQLite DELETE / UPDATE JPQL should not use alias since these are not supported with SQLite


  • NUCCORE-1351 - IN predicate unexpectedly gets transformed to EQ predicate

  • NUCRDBMS-942 - Changes to managed entities not detected when element collection is involved

  • NUCRDBMS-943 - Use of query result aliases when using DatastoreAdapter in quoted case needs quotes adding to SQL

  • NUCRDBMS-947 - SQLite String.substring should use SUBSTR(x,y,z) rather than SUBSTRING(x FROM y FOR z)

  • NUCRDBMS-948 - Fix for NUCRDBMS-823 was non-optimum. If using SQLite and IDENTITY but for a Long field, should get LongMapping with IntegerRDBMSMapping

  • NUCRDBMS-950 - Addition of datanucleus.schema.autoCreateSchema for generating schema can fail on some JDBC drivers that don’t support catalog

  • NUCRDBMS-953 - Schema generation unnecessarily creates indexes for the values of element collections

  • NUCRDBMS-956 - JPQL : Referring to map key/value from outer query in a subquery can result in extra joins adding in the subquery

  • NUCRDBMS-961 - Use of persistent property for persistable object (1-1, N-1), and adding override in subclass results in multiple (duplicate) FKs

  • NUCJODATIME-23 - Wrong Implementation of JodaLocalDateSqlDateConverter Class

DataNucleus AccessPlatform 4.1.4

Sept 15th 2015 : Version 4.1.4 includes the following changes

New Feature

  • NUCCORE-1344 - JPQL Compilation : support limited polymorphic join

  • NUCRDBMS-932 - Support polymorphic joins for entities

  • NUCRDBMS-939 - Support parameters in SELECT clause, particularly when as part of subqueries


  • NUCRDBMS-935 - SQLStatement : change handling of selects to retain SQLText until statement generation


  • NUCCORE-1346 - JDO 3.2 requires change to behaviour at close of EC with active transaction. Make it configurable

  • NUCCORE-1348 - Extend NUCCORE-1338 to EmbeddedMetaData


  • NUCCORE-1345 - Unable to use version tag on ORM file without having to define the strategy again

  • NUCCORE-1349 - JDOQL/JPQL parse of BigInteger value is parsed internally to be Long and loses precision

  • NUCRDBMS-936 - Addendum to NUCRDBMS-917. Dont create indexes when not indexable column

  • NUCRDBMS-938 - Column creation for overridden field can try to create as IDENTITY when no value strategy defined!

DataNucleus AccessPlatform 4.1.3

Aug 16th 2015 : Version 4.1.3 includes the following changes

New Feature

  • NUCCORE-1335 - Add ability to set JDOQL/JPQL strictness on query compilation


  • NUCCORE-1337 - JPQL : support COUNT(*)

  • NUCRDBMS-914 - Support (numeric) bitwise AND, OR, XOR for PostgreSQL, MySQL/MariaDB and SQLServer


  • NUCRDBMS-922 - Handle compilation of "interfaceField == :param"


  • NUCCORE-1331 - Modify query parse/compile to split out bitwise operators (&, |, ^) from conditional (&&, ||)

  • NUCCORE-1334 - Add StoreManager option for whether JDOQL bitwise ops are supported

  • NUCCORE-1338 - Modularise the code for deciding if a persistable field comes from the enhancer, so we can ignore the right ones

  • NUCCORE-1340 - When user specifies a TypeConverter for a field and not found later then exception should be thrown

  • NUCAPIJDO-106 - JDO 3.2 : Add PMF supported option for "JDOQL bitwise ops"

  • NUCNEOFORJ-55 - Access to TypeConverter in FetchFieldManager makes no sense since already available in CompleteClassTable

  • NUCJSON-56 - Access to TypeConverter in FetchFieldManager makes no sense since already available in CompleteClassTable

  • NUCHBASE-97 - Access to TypeConverter in FetchFieldManager makes no sense since already available in CompleteClassTable

  • NUCRDBMS-915 - Support NUCCORE-1334 for DatastoreAdapters that do support it

  • NUCRDBMS-923 - Support NUCCORE-1340


  • NUCCORE-1333 - Object retrieval of bidir relation with non-RDBMS datastore can lead to StackOverflowException when non-transactional and relation fields in FetchPlan

  • NUCCORE-1341 - StringUtils.getStringFromStackTrace is broken since 4.0

  • NUCJPA-320 - Parameter inspection via javax.persistence.Query.getParameters is missing parameters from subqueries

  • NUCJPA-321 - JPAQueryParameter needs equals/hashCode

  • NUCNEOFORJ-54 - When doing a query, cater for the class not being known

  • NUCRDBMS-916 - SQLite String.length should use "LENGTH(col)" rather than "CHAR_LENGTH(col)"

  • NUCRDBMS-917 - Make schema index handling consistent for join tables

  • NUCRDBMS-918 - Dynamic schema generation : if using superclass table and table already created, and have 1-N join table, can fail to generate join table

  • NUCRDBMS-919 - TypeConverterMapping needs to cater for mapping basic type to different basic type but doesn’t currently

  • NUCRDBMS-924 - Wrong SQL join order when alias used in ON condition

  • NUCRDBMS-925 - Using entity select in a subquery results in multiple columns selected

  • NUCRDBMS-926 - NPE when using SUBSTRING in result clause

  • NUCRDBMS-927 - Order by in subquery results in wrong SQL

  • NUCRDBMS-929 - Select of candidate id only has bug when we have multiple PK fields, assigns DN_APPID alias twice which is a problem for some datastores

DataNucleus AccessPlatform 4.1.2

Jul 14th 2015 : Version 4.1.2 includes the following changes

New Feature

  • NUCCORE-1325 - Support Java generic TypeVariable where declared by class generic type bounds

  • NUCJPA-314 - Support specification of datastore identity using XML metadata

  • NUCJPA-316 - Support specification of surrogate version using XML metadata

  • NUCJPA-317 - Provide access to "datastore-id" and "surrogate-version" via helper methods

  • NUCRDBMS-901 - MariaDB support storing millisecs in time columns, needs recognising in adapter

  • NUCRDBMS-911 - When RDBMS supports "FOR UPDATE NOWAIT" provide extension for specifying "NOWAIT"

  • NUCRDBMS-912 - Ability to register an SQLMethod at runtime when not registered via the plugin mechanism

  • NUCRDBMS-913 - Add COUNTSTAR function to equate to SQL "COUNT(*)" since not present in JDOQL/JPQL directly


  • NUCCORE-1323 - Add generics for element, key, value to all wrappers and backing stores

  • NUCCORE-1324 - Bump repackaged ASM to v5.0.4 from 5.0.3

  • NUCJPA-315 - Rename @DatastoreIdentity to be @DatastoreId for consistency

  • NUCRDBMS-899 - Add generics for element, key, value to backing stores (see NUCCORE-1323)

  • NUCRDBMS-904 - PostgreSQL doesn’t support "read uncommitted" so disable in adapter

  • NUCRDBMS-905 - PostgreSQL doesn’t support stored procedures so disable in adapter

  • NUCGUAVA-11 - Support NUCCORE-1323


  • NUCJPA-313 - JPQL generated for Criteria can have too many blanks in FROM clause when no alias

  • NUCJPA-318 - Metamodel Type getJavaType returns wrong classes

  • NUCRDBMS-900 - Schema generation fails if using a FK Map, and a separate unique constraint on a class, and not specifying constraint name

  • NUCRDBMS-902 - PostgreSQL function "SUBSTRING" needs explicit CAST of FROM/FOR args to INTEGER otherwise fails

  • NUCRDBMS-903 - StringExpression.add creates CONCAT (||) of two expressions but should always be in parentheses, and in one case isn’t

  • NUCRDBMS-906 - Change entity after persist causes insert to fail

  • NUCRDBMS-908 - DN4 does not seem to automatically create the DB schema (as in @PersistenceCapable(schema=…​) for any entities annotated as such

  • NUCRDBMS-909 - User specified catalog/schema should be translated into adapter case as required

  • NUCRDBMS-910 - H2 adapter CREATE SCHEMA should use schema rather than catalog

DataNucleus AccessPlatform 4.1.1

Jun 13th 2015 : Version 4.1.1 includes the following changes


  • NUCCORE-1322 - If user calls setXXX for a container field to replace the delegate container then we should swap the value being managed.

  • NUCGUAVA-10 - Support NUCCORE-1322

  • NUCRDBMS-898 - Support passing required JoinType to nested fetches, so when one object is fetched LEFT OUTER then subobjects can be also


  • NUCCORE-1316 - StateManagerImpl.setIdentity has a block of code that seemingly is not needed

  • NUCJPA-309 - Code for processing AttributeConverters is dotted through code. Move to convenience location

  • NUCRDBMS-897 - Support "log" function on Postgresql via "LN" rather than "LOG"


  • NUCCORE-1315 - Persistable class with own writeObject() method should be enhanced to have a call to dnPreSerialize before the user code

  • NUCCORE-1317 - literal timestamp parsing bug in resulting with "'…​' expected in JDBC escape syntax" exception

  • NUCCORE-1320 - persistence.xml "exclude-unlisted-classes" tag default value is incorrect

  • NUCJPA-310 - error with entityManager.lock(…​, LockModeType.OPTIMISTIC)

  • NUCJPA-311 - error in JPAEntityManager.find(Class, Object, LockModeType)

  • NUCJPA-312 - When converting Criteria query with Timestamp literal into JPQL string form, it omits the nanosecs part

DataNucleus AccessPlatform 4.1.0.RELEASE

May 19th 2015 : Version 4.1 RELEASE includes the following changes

New Feature

  • NUCCORE-1308 - Support Java generic TypeVariable in 1-1/N-1 relations

  • NUCCORE-1309 - Support Java generic TypeVariable in 1-N/M-N relations

  • NUCCORE-1312 - Support JPQL with RIGHT OUTER JOIN



  • NUCCORE-1313 - Support JPQL FROM "ON" clauses that are other than DyadicExpression

  • NUCCORE-1314 - If annotation specified on field and method then take as field and use method annotations as if on field

  • NUCJPA-307 - Criteria API usage currently requires something to be selected (using select/multiSelect) whereas could default to candidate

  • NUCRDBMS-894 - Query of Collection.contains where the element is of an invalid type should create query with 1=0 rather than throw exception

  • NUCRDBMS-895 - Support JPQL "COALESCE"/"NULLIF" with non-numeric arguments


  • NUCAPIJDO-91 - Support typesafe query StringExpression.add(…​)

  • NUCJPA-306 - Change "datanucleus.rdbms.allowColumnReuse" default to "true" for JPA usage

  • NUCRDBMS-890 - JPQL : Support use of MEMBER OF on Map (and interpret as "Map.containsValue")

  • NUCRDBMS-891 - Support query joins that join to EmbeddedId to provide access to the fields

  • NUCRDBMS-896 - JDOQL : support CharacterLiteral.toUpperCase/toLowerCase methods


  • NUCCORE-1311 - JPQL "[NOT] IN" not compiled correctly when we have parameter yet value type not yet known

  • NUCJPA-308 - always tries to create "(val == collVal1 || val == collVal2 || …​) but should use IN if single value specified to allow for Collection parameter

  • NUCRDBMS-893 - FROM joins should process first part of the join expression and take the table for that as one side of the join

DataNucleus AccessPlatform 4.1.0.M4

May 1st 2015 : Version 4.1 Milestone 4 includes the following changes

New Feature

  • NUCCORE-1292 - Allow subquery in SELECT clause (JDOQL/JPQL)

  • NUCJPA-304 - Support @Convert with attributeName of "key" or "value" to apply to the key or value of a Map field

  • NUCJPA-305 - Support @Convert when specified on Collection to convert the element

  • NUCRDBMS-17 - Classes with collection/map fields should be allowed to have "subclass-table" inheritance strategy, and the elements/keys/values should be allowed to have "subclass-table"

  • NUCRDBMS-18 - 1-1 undirectional relation needs the flexibility of allowing "subclass-table" at the other end

  • NUCRDBMS-19 - Support for 1-N bidir relation between impl of interface with collection of elements

  • NUCRDBMS-719 - Provide the ability to override a builtin method mapping

  • NUCRDBMS-882 - Support for DEGREES/RADIANS functions and JDOQL Math.toDegrees/Math.toRadians


  • NUCCORE-1300 - Call to PM.refreshObject/retrieveObject/evictObject gives unclear exception message when transient object passed

  • NUCCORE-1306 - TypeManager should use ConcurrentHashMap since multithreaded

  • NUCAPIJDO-89 - Allow PM.getFetchGroup/PMF.getFetchGroup to include members of existing named/static query when available

  • NUCRDBMS-878 - Query attempting to select a 1-1/N-1 field which uses subclass-table (hence no FK) throws exception on form of statement but should just select FK only

  • NUCRDBMS-884 - When a JDBC driver provides multiple sql-type for a jdbc-type should be possible to have default matching plugin.xml

  • NUCSPATIAL-54 - Support NUCRDBMS-884


  • NUCCORE-1293 - Prevent SCOOperation’s being added to OperationQueue when owner object is not yet flushed to datastore

  • NUCCORE-1294 - ManagedRelations : backed Set wrappers initialise(Collection, Collection) register changes twice

  • NUCCORE-1296 - In-memory evaluation of assorted functions

  • NUCCORE-1298 - Move "implementation-classes" handling to be with CollectionMetaData, MapMetaData etc

  • NUCCORE-1301 - Metadata load often resulted in attempt to find metadata for single-field identity classes when obviously not persistent

  • NUCCORE-1302 - Clean up ExecutionContext.close to merge methods only used once, so we improve logging

  • NUCAPIJDO-90 - Change JDOAdapter.isXXX to use Persistable direct rather than routing through JDOHelper.isXXX and then through JDOImplHelper.nonBinaryCompatibleIs

  • NUCJPA-302 - Support query hints on @NamedQuery, @NamedNativeQuery etc

  • NUCRDBMS-877 - 1-N FK Set of interface object doesn’t allow update of FK reliably

  • NUCRDBMS-883 - JPQL should allow ORDER BY using result alias


  • NUCCORE-1295 - Generic compiler can fail to correctly detect class names in PrimaryExpression and result in invalid compilation

  • NUCCORE-1299 - Make sure that close of ExecutionContext completes, checking for null objects

  • NUCCORE-1303 - Joining over map value not working when wanting to chain the join to sub-objects of the value

  • NUCCORE-1304 - Generic compile of filter "field NOT IN (:param)" doesn’t include the NOT in the resultant compile

  • NUCCORE-1305 - Generic compile of filter something like "field.method().field.method()" is not compiled correctly

  • NUCCORE-1307 - List wrapper SCOs have error in initialise method when updating (setXXXField); should log with operation queue in more situations

  • NUCJPA-303 - Metamodel returns ONE_TO_ONE instead of MANY_TO_ONE

  • NUCRDBMS-876 - When we try to fetch a N-1 "owner" field (with join table) where the owner has an interface, it doesn’t get the implementation and fails

  • NUCRDBMS-879 - Backing store of Collection with multiple root elements doesn’t give correct info for size()

  • NUCRDBMS-880 - When storing java.sql.Timestamp as String it calls ps.setObject(Timestamp) and relies on JDBC driver

  • NUCRDBMS-881 - RuntimeException caused by readl lock during preDelete is ignored

  • NUCRDBMS-885 - Selecting a map value not working when the value has a Map field in it

DataNucleus AccessPlatform 4.1.0.M3

Apr 4th 2015 : Version 4.1 Milestone 3 includes the following changes

New Feature

  • NUCCORE-1282 - Allow a query to be registered as a named query

  • NUCCORE-1290 - Support JPQL "Simple CASE expression"

  • NUCAPIJDO-85 - Ability to save a (created) query as a named query for later use

  • NUCJPA-295 - Allow a query to be registered as a named query

  • NUCJPA-301 - Implement CriteriaBuilder "selectSimpleCase"

  • NUCREST-19 - Support persistence of Maps - see JSON plugin

  • NUCREST-20 - Support persistence of array fields

  • NUCREST-23 - Support GZIP encoding on GET response

  • NUCRDBMS-866 - Support JPQL KEY, VALUE

  • NUCRDBMS-873 - Support specification of type-converter-name on <element>, <key>, <value>


  • NUCAPIJDO-86 - Make PersistenceManager support AutoCloseable (Java7+)

  • NUCAPIJDO-87 - Make JDOQuery implement AutoCloseable

  • NUCREST-17 - Allow specification of maxFetchDepth on GET requests

  • NUCRDBMS-871 - Select of KEY or VALUE only selects the "id" of the key/value class currently, but should select the FetchPlan

  • NUCRDBMS-872 - JPQL : Support for parameters in FROM "ON" clause

  • NUCRDBMS-874 - Upgrade to HikariCP 2.3.5 and add some properties


  • NUCCORE-1284 - Move AbstractSQLQuery across to RDBMS plugin since no other datastore supports "SQL" in the same way

  • NUCCORE-1287 - Enhancement of persistent properties (getter/setter) does not cope with subclasses overriding getter/setter (and generic type of collection)

  • NUCCORE-1289 - Support parsing of JPQL "KEY(myMap).field" (ditto VALUE)

  • NUCCORE-1291 - Support compilation of JPQL queries with HAVING containing subquery

  • NUCJPA-299 - PluralAttributeImpl.getElementType returns null for a Map, but should return something

  • NUCJPA-300 - Implement CriteriaBuilder "selectCase" methods

  • NUCREST-21 - Should not need to specify "class" in related object when sending PUT/POST

  • NUCRDBMS-862 - Move AbstractSQLQuery across to RDBMS plugin since no other datastore supports "SQL" in the same way

  • NUCRDBMS-864 - Support persisting a java.util.Calendar as jdbc-type="DATE"

  • NUCRDBMS-865 - Support persisting a java.util.Calendar as jdbc-type="TIME"

  • NUCRDBMS-870 - Consider upgrading cascade handling to process the forming of relations if elements/keys/values are present but no cascade set


  • NUCCORE-1286 - Check for setter of a persistent property doesn’t allow for it being in superclass

  • NUCCORE-1288 - Annotations for persistent properties are sometimes not processed leading to handling as persistable field

  • NUCJPA-284 - DataNucleus class has a bug and hence a slightly complex two-level embedded query failed

  • NUCJPA-296 - Use of EntityGraph with multiple levels only respects top level, subgraphs are stored with null fetchGroupName and discarded

  • NUCREST-16 - GET using "id" and specified fetchGroup doesn’t necessarily respect fetchGroup on return

  • NUCJODATIME-22 - Difference in persistence of LocalDate when persisting to DATE column from 3.2

  • NUCRDBMS-861 - Query using FetchPlan, and with maxFetchDepth set to != 1 will always just pull in candidate and next level

  • NUCRDBMS-867 - Error in JDOQL Map.get handling for key stored in value table or value stored in key table cases

  • NUCRDBMS-869 - NPE when using on condition with KEY

  • NUCRDBMS-875 - UUIDMapping can NPE on initialize if creating as reference to a "pk" UUIDMapping

DataNucleus AccessPlatform 4.1.0.M2

Mar 9th 2015 : Version 4.1 Milestone 2 includes the following changes

New Feature

  • NUCCORE-1275 - Add method DataNucleusEnhancer.addPersistenceUnit(PersistenceUnitMetaData) for dynamically created persistence units

  • NUCJPA-290 - Provide access to other value generators not in scope of JPA spec


  • NUCCORE-1278 - Persistence property "datanucleus.findObject.typeConversion" should be overrideable on PM/EM basis

  • NUCCORE-1279 - Support specification of "comparator-name" via extensions on the field rather than just on collection metadata

  • NUCCORE-1280 - Move all class/member level metadata extensions to "public static final String" fields in org.datanucleus.metadata.MetaData

  • NUCAPIJDO-84 - Make use of ConcurrentHashMap for pm cache now that we support Java7+ only

  • NUCJPA-293 - Make use of ConcurrentHashMap for persistence unit metadata now that we support Java7+ only

  • NUCMONGODB-153 - Support query of 1-1/N-1 reference compared to relation object

  • NUCMONGODB-158 - Cater for query structure like "field == param" or "field == literal" and the field uses a TypeConverter

  • NUCMONGODB-160 - java.sql.Time, java.sql.Date are being stored as String when could use "date" Mongo type

  • NUCMONGODB-161 - Support retrieval of interface fields

  • NUCRDBMS-852 - Support query fetch of Collection/Map/Array fields when serialised (i,e stored in single column of owner table).

  • NUCRDBMS-858 - Support NUCCORE-1280

  • NUCJODATIME-14 - Extend Joda time support for LocalDateTime


  • NUCCORE-1271 - Drop targetClass from org.datanucleus.identity.SingleFieldId since duplicates targetClassName

  • NUCCORE-1272 - Rename options for "datanucleus.valuegeneration.transactionAttribute" to be NEW and EXISTING

  • NUCCORE-1274 - Support CASE / IF/ELSE "when" conditions that are not completely defined (i.e depend on previous when conditions)

  • NUCCORE-1276 - Remove refs to javax.jdo properties/methods

  • NUCCORE-1281 - Provide handling for Enum "value getter method" so it can be used by all store plugins (currently in RDBMS only)

  • NUCAPIJDO-82 - Implement Java7 JDOConnectionJDBCImpl methods since using Java7+ now

  • NUCAPIJDO-83 - Support NUCCORE-1271

  • NUCJPA-291 - Allow direct access to java.sql.Connection via EM.unwrap when using RDBMS

  • NUCJPA-292 - Remove use of javax.jdo.option.transactiontype : only need internal DataNucleus property with JPA

  • NUCJPA-294 - Implement Criteria FetchImpl.fetch methods so we can chain fetches

  • NUCRDBMS-850 - Change "datanucleus.multivaluedFetch" to be RDBMS specific and specifiable globally

  • NUCRDBMS-851 - Add check on CASE "action" expression types for consistency

  • NUCRDBMS-853 - HikariCP : Make leakThreshold, maxLifetime configurable

  • NUCRDBMS-854 - Support NUCCORE-1274

  • NUCRDBMS-855 - Drop support for "adapter-column-name" for overriding join table order column name. Just use <order>

  • NUCRDBMS-860 - Push Enum "value getter method" handling down into datanucleus-core so we can make it available for other store plugins


  • NUCCORE-1277 - DeleteFieldManager "nullBidirIfNotDependent" handling incomplete when dealing with N-1 relationships

  • NUCEXCEL-80 - Make sure StoreData is populated before using fetchObject(…​)

  • NUCEXCEL-81 - Numeric object wrapper fields can fail on retrieval due to falling back to TypeConverter

  • NUCEXCEL-82 - StoreEmbeddedFieldManager has incorrect logic in detection of embedded sub field

  • NUCEXCEL-84 - Persist of object with composite PK results in blank row in worksheet before the next inserted object

  • NUCEXCEL-85 - Classes without table (abstract) can cause NPE if you try to do query over them

  • NUCEXCEL-86 - Fetch of relation fields doesn’t cater for the related object being deleted elsewhere. Copy Cassandra plugin handling

  • NUCODF-60 - Make sure StoreData is populated before using fetchObject(…​)

  • NUCODF-61 - StoreEmbeddedFieldManager has incorrect logic in detection of embedded sub field

  • NUCODF-62 - Classes without table (abstract) can cause NPE if you try to do query over them

  • NUCODF-63 - Fetch of relation fields doesn’t cater for the related object being deleted elsewhere. Copy Cassandra plugin handling

  • NUCMONGODB-154 - MongoUtils.getClassNameForIdentity should use StoreManager to get subclasses so they get registered

  • NUCMONGODB-156 - Persisting array of char, byte etc can fail on retrieval since stored as List<String>

  • NUCMONGODB-157 - Query of class with field using multiple-column TypeConverter only selects the first column

  • NUCMONGODB-163 - Creattion of index/unique is incorrect. Should set name if not set, and should use class name in generated name

  • NUCJSON-54 - Classes without table (abstract) can cause NPE if you try to do query over them

  • NUCJSON-55 - Fetch of relation fields doesn’t cater for the related object being deleted elsewhere. Copy Cassandra plugin handling

  • NUCRDBMS-848 - "max" value generator provides wrong id if 2 objects are persisted in one transaction

  • NUCRDBMS-856 - ViewImpl seems to have regression in validate() method

  • NUCRDBMS-857 - Typo from NUCRDBMS-838

DataNucleus AccessPlatform 4.1.0.M1

Jan 19th 2015 : Version 4.1 Milestone 1 includes the following changes

New Feature

  • NUCRDBMS-253 - DB2 : SerializeRead/useUpdateLock "for update" shouldn’t have been appended to all selects


  • NUCCORE-1269 - Map wrapper SCOs have inefficient initialise method when updating (setXXXField). Create efficient logic for working out changed elements

  • NUCCORE-1270 - Add ExecutionContext.getLevel1Cache for symmetry with NucleusContext and Level2Cache

  • NUCAPIJDO-81 - JDO class load listener : catch any exceptions loading the class and log rather than rethrowing

  • NUCRDBMS-845 - Handling of case expression should check for non-Boolean conditional expression, and convert to CaseNumericExpression if possible


  • NUCCORE-1229 - Add ExecutionContextReference interface, and use it in bytecode enhancement contract

  • NUCCORE-1238 - Set of container field of a persistable doesn’t make use of the old value when updating the field; should use the old value to decide what to do

  • NUCCORE-1260 - Standard collection/map wrappers remove() does cascade delete direct, yet should check if queued operations

  • NUCCORE-1263 - Add OperationQueue operations for persists, removes and updates

  • NUCCORE-1265 - Move StateManagerImpl.getEmbeddedOwners to ExecutionContext

  • NUCCORE-1266 - Separate embedded owner field setting code from StateManagerImpl.wrapSCOField

  • NUCCORE-1267 - SCOCollection/SCOMap updateEmbeddedXXX should take in makeDirty flag

  • NUCRDBMS-844 - JDOQL/JPQL : Allow "expr = {param}" to have flexibility when the param is null so that can map to "IS NULL" or "= null"

  • NUCRDBMS-846 - Support boolean Case expressions (just like we do numeric Case expressions)


  • NUCCORE-1264 - Loss of all collection elements on add+remove when playing around with SCO wrapper of an object that was subsequently made HOLLOW

  • NUCRDBMS-843 - MapMapping.postUpdate when setting to null doesn’t clear the backing store but should

  • NUCRDBMS-847 - JDOQL statement with multi-tenant PersistenceManager