> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Specific persistence services

> Reference for the specific CRUD service implementations in Atoti Limits, covering the Datastore service, external JPA database service, and the combined default service that propagates changes to both

## Overview

The following three services implement the contract defined by [ILimitsAppCrudService](./persistence-services-parent-interface),
but they focus on more specific components. These are the main services used for persisting data in Atoti Limits:

## ILimitsAppDatastoreCrudService

The `ILimitsAppDatastoreCrudService` is an empty extension of
the `ILimitsAppCrudService` interface that is specifically designed to work with an **Atoti
Datastore**.

## ILimitsAppJpaDatabaseCrudService

The `ILimitsAppJpaDatabaseCrudService` is an empty extension of
the `ILimitsAppCrudService` interface that is specifically designed to work with a
**connected JPA Database**.

## IPreferredLimitsAppCrudService

This is the default implementation of `ILimitsAppCrudService`. It uses the combination of `ILimitsAppDatastoreCrudService` and `ILimitsAppJpaDatabaseCrudService` to
provide a default implementation of the `ILimitsAppCrudService` interface. This means that
changes made to managed objects will be propagated **to both the Atoti Datastore and the relevant
external databases**.

### No external database configured

If no external database is configured, the `IPreferredLimitsAppCrudService` will only
interact
with the Atoti Datastore. We do this by injecting a NoOp (“No Operation”) implementation of
the `ILimitsAppJpaDatabaseCrudService` interface, namely  `NoOpLimitsAppJpaDatabaseCrudService`. This means that changes made to managed
objects will only be propagated to the Atoti Datastore.
