DATACASS-250 - Support lightweight transactions.

We now support lightweight transactions via InsertOptions and UpdateOptions. Options can be used with the imperative, asynchronous and reactive templates using insert(…) and update(…) write methods. Write methods do not return the entity if the operation is not applied because of a lightweight transaction. Specifically, the resulting entity is null using the imperative and asynchronous Cassandra templates.

The reactive Cassandra template suppresses particular entities (inserted/updated through a entity stream) if its write operation was not applied due to a lightweight transaction.

InsertOptions lwtInsertOptions = InsertOptions.builder().withIfNotExists().build();

User user = new User("heisenberg", "Walter", "White");
User inserted = template.insert(user, lwtInsertOptions);

UpdateOptions lwtUpdateOptions = UpdateOptions.builder().withIfExists().build();

User user = new User("heisenberg", "Walter", "White");
User updated = template.update(user, lwtUpdateOptions);
This commit is contained in:
Mark Paluch
2017-06-09 14:33:15 +02:00
committed by John Blum
parent 4e9fd9ae0e
commit 8d64401aa8
20 changed files with 756 additions and 59 deletions

View File

@@ -5,6 +5,7 @@
== What's new in Spring Data for Apache Cassandra 2.0
* `Update` and `Query` objects.
* CRUD repository interface renaming: `CassandraRepository` using `MapId` is now renamed to `MapIdCassandraRepository`. `TypedIdCassandraRepository` is renamed to `CassandraRepository`.
* Lightweight transactions via `InsertOptions` and `UpdateOptions` using the Template API.
[[new-features.1-5-0]]
== What's new in Spring Data for Apache Cassandra 1.5

View File

@@ -1160,14 +1160,15 @@ Person qp = cassandraTemplate.selectOne(query(where("age").is(33)), Person.class
The insert/save operations available to you are listed below.
* `T` *insert* `(T objectToSave)` Insert the object in an Apache Cassandra table.
* `T` *insert* `(T objectToSave, WriteOptions writeOptions)` Insert the object in an Apache Cassandra table applying `WriteOptions`.
* `T` *insert* `(T objectToSave, InsertOptions options)` Insert the object in an Apache Cassandra table applying `InsertOptions`.
A similar set of update operations is listed below
* `T` *update* `(T objectToSave)` Update the object in an Apache Cassandra table.
* `T` *update* `(T objectToSave, WriteOptions writeOptions)` Update the object in an Apache Cassandra table applying `WriteOptions`.
* `T` *update* `(T objectToSave, UpdateOptions options)` Update the object in an Apache Cassandra table applying `UpdateOptions`.
Then, there is always the old fashioned way. You can write your own CQL statements.
Then, there is always the old fashioned way. You can write your own CQL statements. You can configure with `InsertOptions` and `UpdateOptions`
additional options such as TTL, consistency level and lightweight transactions.
[source,java]
----