Whilst we aim to ultimately support all API features on all supported datastores, this isn't currently possible. See below for a summary of what feature is supported on which datastore. .
| Feature |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| General Features | ||||||||||||||
| Datastore Identity |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Application Identity |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Nondurable Identity [1] |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Composite Identity |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Nontransactional |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| ACID Transactions |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Versioned objects |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Optimistic Checks |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Fetch Plan control |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Native Connection access (JDO) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Encryption of data [7] |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Backed object wrappers [2] |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Cascade Persist |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Cascade Update |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Cascade Delete |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Schema Evolution - New fields [3] |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Value Generation | ||||||||||||||
| native(JDO)/auto(JPA) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| increment(JDO)/table(JPA) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| identity(JDO/JPA) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| sequence(JDO/JPA) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| uuid-hex(JDO) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| uuid-string(JDO) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| uuid |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| timestamp |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| timestamp-value |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| max |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| O/R Mapping | ||||||||||||||
| Indexes |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Unique Keys |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Foreign Keys |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Primary Keys |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Inheritance(complete-table) [4] |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Inheritance(new-table) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Inheritance(subclass-table) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Inheritance(superclass-table) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Discriminators |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Secondary Tables |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Join Tables |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Embedded PC |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Embedded PC stored nested ([8]) |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Embedded Collection |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Embedded Map |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Embedded Array |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Serialised PC |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Serialised Collection |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Serialised Map |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| 1-1 |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| 1-N |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| M-N |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| SchemaTool |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Multitenancy by discriminator |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Field Types | ||||||||||||||
| Primitives, Wrappers |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| java.lang.String etc |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| java.lang.Enum |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| java.util.Date etc |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| java.lang.Object |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| java.io.Serializable |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| java.util.Collection |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| java.util.Map |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Arrays |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Interfaces |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Type Converters |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Type Converter : auto-apply |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Type Converter : multicolumn |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Queries | ||||||||||||||
| JDOQL evaluated in memory |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| JDOQL evaluated in datastore [5] |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| JDOQL of candidate interface |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| JDOQL Polymorphic queries |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| JPQL evaluated in memory |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| JPQL evaluated in datastore [5] |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| SQL [6] |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| Stored Procedures |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| JDOQL Bulk Update |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| JDOQL Bulk Delete |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| JPQL Bulk Update |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
| JPQL Bulk Delete |  |  |  |  |  |  |  |  |  |  |  |  |  |  | 
                [1]  represents partial implementation.
 represents partial implementation.
                [2] - when a collection/map/array is "backed" it can put individual elements in the
                datastore at once rather than writing everything, and additionally can control how the elements
                are retrieved
                [3]  represents partial implementation.
 represents partial implementation.
                [4]  means that datastore doesn't explicitly
                support inheritance but "complete-table" is the nearest to what happens.
 means that datastore doesn't explicitly
                support inheritance but "complete-table" is the nearest to what happens.
                [5]  means partially evaluated in datastore
                and remains evaluated in memory.
 means partially evaluated in datastore
                and remains evaluated in memory.
                [6]  means supports some SQL syntax.
 means supports some SQL syntax.
                [7] Using Cumulus4j plugin for DataNucleus
                [8] The embedded object is stored nested in the datastore under the owner object