# Interface BaseDatastoreService (5.0.3)

    public interface BaseDatastoreService

Methods that are common between [DatastoreService](https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.DatastoreService) and [AsyncDatastoreService](https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.AsyncDatastoreService).

## Methods

### getActiveTransactions()

    public abstract Collection<Transaction> getActiveTransactions()

Returns all [Transaction](https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.Transaction)s started by this thread upon which no attempt to commit or
rollback has been made.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html<https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.Transaction>` |   |

### getCurrentTransaction()

    public abstract Transaction getCurrentTransaction()

Returns the current transaction for this thread, or throws an exception if there is no current
transaction. The current transaction is defined as the result of the most recent, same-thread
invocation of beginTransaction() that has not been committed or rolled back.

Use this method for when you expect there to be a current transaction and consider it an
error if there isn't.

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.Transaction` | The current transaction. |

### getCurrentTransaction(Transaction returnedIfNoTxn)

    public abstract Transaction getCurrentTransaction(Transaction returnedIfNoTxn)

Returns the current transaction for this thread, or returns the parameter if there is no
current transaction. You can use `null` or provide your own object to represent null. See
[#getCurrentTransaction()](https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.BaseDatastoreService#com_google_appengine_api_datastore_BaseDatastoreService_getCurrentTransaction__) for a definition of "current transaction."

Use this method when you're not sure if there is a current transaction.

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `returnedIfNoTxn` | `https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.Transaction` The return value of this method if there is no current transaction. Can be null. |

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.Transaction` | The current transaction, or the parameter that was passed in if there is no current transaction. |

### prepare(Query query)

    public abstract PreparedQuery prepare(Query query)

Prepares a query for execution.

This method returns a [PreparedQuery](https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.PreparedQuery) which can be used to execute and retrieve
results from the datastore for `query`.

This operation will not execute in a transaction even if there is a current transaction and
the provided query is an ancestor query. This operation also ignores the [ImplicitTransactionManagementPolicy](https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.ImplicitTransactionManagementPolicy). If you are preparing an ancestory query and you want it
to execute in a transaction, use [#prepare(Transaction, Query)](https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.BaseDatastoreService#com_google_appengine_api_datastore_BaseDatastoreService_prepare_com_google_appengine_api_datastore_Transaction_com_google_appengine_api_datastore_Query_).

| **Parameter** ||
|---|---|
| **Name** | **Description** |
| `query` | `https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.Query` a not `null Query`. |

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.PreparedQuery` | a not `null PreparedQuery`. |

### prepare(Transaction txn, Query query)

    public abstract PreparedQuery prepare(Transaction txn, Query query)

Exhibits the same behavior as [#prepare(Query)](https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.BaseDatastoreService#com_google_appengine_api_datastore_BaseDatastoreService_prepare_com_google_appengine_api_datastore_Query_), but executes within the provided
transaction. It is up to the caller to commit or rollback. Transaction can be null.

| **Parameters** ||
|---|---|
| **Name** | **Description** |
| `txn` | `https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.Transaction` |
| `query` | `https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.Query` |

| **Returns** ||
|---|---|
| **Type** | **Description** |
| `https://docs.cloud.google.com/appengine/docs/standard/java-gen2/reference/services/bundled/latest/com.google.appengine.api.datastore.PreparedQuery` |   |