Overview
Catatumbo is an Open Source Object Mapping and Persistence framework for Google's
Cloud Datastore and
Cloud Firestore1.
Catatumbo
allows to effortlessly save model objects to the Cloud Datastore as well as retrieve and map
the data from the
Cloud Datastore to model objects. Catatumbo is similar to JPA (Java Persistence API), but is
specifically designed
to work with Google Cloud Datastore instead of Relational Databases.
Catatumbo framework is built on top of
Google Cloud Java Client for Datastore API
(formerly known as gcloud-java-datastore API).
The framework provides a handful of annotations to make your model classes manageable by the
framework.
Features
- Automatic mapping of model classes to Cloud Datastore Entities and vice versa. Model classes may follow the
below design patterns:
-
Classic Java Beans Pattern (a.k.a. POJO) - with a default constructor, accessor
(getter) methods and
mutator (setter) methods.
-
Builder Pattern - for immutable persistence objects and/or to ensure a persistence
object state is
always valid/consistent.
- Automatic generation of Identifiers (for both Numeric and String types)
- Support for strongly typed Identifiers (e.g. custom class UserId that wraps a numeric or string Id)
- Ignore specific fields of your model object from persistence operations
-
Support for a variety of Data Types -
- boolean, Boolean
- char, Character
- short, Short
- int, Integer
- long, Long
- float, Float
- double, Double
- BigDecimal
- String
- Byte Array
- Char Array
- java.util.Date
- java.util.Calendar
- java.time.LocalDate
- java.time.LocalTime
- java.time.LocalDateTime
- java.time.OffsetDateTime
- java.time.ZonedDateTime
- Enum
- Geo Location (a.k.a Geo Point)
- Keys, Parent Keys and Key References
- java.util.List
- java.util.Set
- java.util.Map
- Map of Maps
- Ability to annotate which fields are indexed/not indexed
- Ability to skip persistence of fields if their value is null
- Support for secondary indexes to index a property for case-insensitive
querying/sorting.
- Support for embedded objects (e.g. Address object inside Customer model). Embedded
objects can be stored in exploded (each field of embedded object is a separate property)
form or imploded (the embedded object is stored in a single field)form.
- Support for persisting inherited fields
- Support for entity listeners which allow your application to react to certain
persistence events.
- Support for Optimistic Locking using automatic entity versioning scheme
- Automatic timestamping of entities using
@CreatedTimestamp
and @UpdatedTimestamp
annotations.
- Support for multi-tenancy - allows working with multiple Namespaces in the Cloud Datastore.
- Ability to override default mappers for a given data type
- Ability to define a custom mapper on a per-field basis
- Create, Retrieve, Update, Delete, Upsert (update or insert)
- Execute GQL Queries
- Entity Queries
- Projection Queries
- Key-only Queries
- Support for Batch Writes
- Transaction Support
- Metadata API for retrieving the Datastore metadata
- Programmatic access to Datastore Statistics
- Ability to work with Local Datastore (a.k.a. Datastore Emulator)
1 Google Cloud Firestore is only supported when running in Datastore mode.