JDXA (JDX for Android)
Highlights and Features

Object-Relational Mapping (ORM) is one of the most complex issues to address in modern application architecture. JDXA (JDX for Android) ORM provides a simple, practical, and robust solution to this important problem. JDXA solves the tough problem of persistence of domain objects for Android applications by eliminating endless lines of complex SQL code.

You don’t need to get bogged down with overly intricate methodologies and over-arching frameworks. JDXA gives you the control you need to be an effective developer, helping you create more flexible and higher quality mobile applications faster.

The JDXA ORM product may be licensed in two editions – JDXA Lite and JDXA Professional. The following table describes the highlights and features of the different editions of the product.

Highlights and Features JDXA
Lite
JDXA Professional
Simple, Non-intrusive, and Flexible Design    
Simple concepts; easy development steps; quick learning curve
No need to inherit from a base class or implement any special interfaces
Dynamic mapping engine: No static generation and maintenance of large amounts of messy code
No pre-processing or post-processing of your code
Easy evolution of object and relational models
     
Smart and Elegant Mapping Specification
Declarative mapping specifications based on a simple grammar
Human-readable and easily comprehensible
No need to struggle with complex XML files
No need to clutter your source code with mapping annotations
Compact; most default mapping is automatically deduced; avoids verbosity
Allows cross-referencing of classes and collections no matter in which order their mappings have been defined
Intuitive and flexible ways of mapping complex object structures
Maximum number of mapping classes 10 Unlimited
     
Support for Complex Object Modeling including Class Hierarchies and JSON Objects
Associative relationships (Containment by Reference)
Aggregated relationships (Containment by Value)
Persistence-by-reachability
One-to-One relationships
One-to-Many relationships
Many-to-Many relationships
Multiple options to store class-hierarchy objects
Inline storage of attributes of a contained object
Implicit attributes whose values are automatically initialized based on RELATIONSHIPs
Virtual attributes
JSON Objects persistence
Kotlin Objects persistence
     
Small Set of Simple and Flexible APIs
Support for Transactions
Flexible query options – deep, shallow, and anything in-between.
Sophisticated query predicates (including path-expressions)
Named queries
Polymorphic queries
Positional queries
Object streaming
Aggregate operations (COUNT, MIN, MAX, AVG, SUM)
Support for instance callback methods
Partial object loading
Retrieving collections objects in ascending/descending order
Filter referenced objects for query, update, and delete operations
Bulk inserts, updates, and deletes
Persistence-by-reachability
Sequence generators
 
Object Caching (Read-only objects)
Caching options at individual class level to improve performance
Regular and LRU caches
Pre-population option for caching objects
     
Automatic Schema Generation
Automatic creation of the database schema (tables, constraints. etc.) as per the object model and the ORM specification
Facility for pre-population of data after schema creation
     
Lightweight and Optimized Mapping Engine
Short code paths
Use of Prepared statements
Optimized SQL statements
Minimal database trips
Caching of metadata
     
Android Specific Utility Classes
JDXHelper: A useful facade (wrapper) for many of the JDX ORM methods.
JDXQueryAsyncTask: An AsyncTask to facilitate making JDX query calls in a separate (non-UI) thread.
SimpleObjectListAdapter: An object list adapter utility class to retrieve and view objects of a given class in a ListActivity
SimpleStreamingObjectsListAdapter: An object list adapter utility class to retrieve and view a polymorphic stream of objects of a given class in a ListActivity
JDXSeqUtil: A utility class to easily mange persistently unique Named Sequence values
     
Easy-to-learn and Easy-to-use
Clean design – not an over-engineered framework with complex semantics
Extensive documentation (Comprehensive user manual and Javadocs)
No requirement of learning of a new query language
Many working examples
Optional logging of all SQL statements
Meaningful error and debug messages to diagnose any problems