DATACASS-106 - Support persistence lifecycle callbacks.
We now support persistence lifecycle callbacks via Spring's ApplicationEvents. Events are fired upon select, insert, update, delete, and truncate statements. The following events are available: * BeforeSaveEvent: Before inserting/updating a row in the database, via insert(…) and update(…). * AfterSaveEvent: After inserting/updating a row in the database, via insert(…) and update(…). * BeforeDeleteEvent: Before deleting row from the database, via delete(…) and truncate(…). * AfterDeleteEvent: After deleting row from the database, via delete(…) and truncate(…). * AfterLoadEvent: After retrieving a row from the database, via select(…), slice(…), and stream(…). * AfterConvertEvent: After converting a row from the database to a POJO, via select(…), slice(…), and stream(…). Original pull request: #123.
This commit is contained in:
committed by
Mark Paluch
parent
7e7bc5121b
commit
774d6b2732
@@ -582,3 +582,33 @@ Below is an example of a Spring `Converter` implementation that converts from a
|
||||
}
|
||||
----
|
||||
|
||||
|
||||
[[cassandra.mapping-usage.events]]
|
||||
== Lifecycle Events
|
||||
|
||||
Built into the Cassandra mapping framework are several `org.springframework.context.ApplicationEvent` events that your application can respond to by registering special beans in the `ApplicationContext`. By being based on Spring's application context event infrastructure this enables other products, such as Spring Integration, to easily receive these events as they are a well known eventing mechanism in Spring based applications.
|
||||
|
||||
To intercept an object before it goes into the database, you'd register a subclass of `org.springframework.data.cassandra.core.mapping.event.AbstractCassandraEventListener` that overrides the `onBeforeSave` method. When the event is dispatched, your listener will be called and passed the domain object (Java entity).
|
||||
|
||||
====
|
||||
[source,java]
|
||||
----
|
||||
public class BeforeSaveListener extends AbstractCassandraEventListener<Person> {
|
||||
@Override
|
||||
public void onBeforeSave(BeforeSaveEvent<Person> event) {
|
||||
... change values, delete them, whatever ...
|
||||
}
|
||||
}
|
||||
----
|
||||
====
|
||||
|
||||
Simply declaring these beans in your Spring `ApplicationContext` will cause them to be invoked whenever the event is dispatched.
|
||||
|
||||
The list of callback methods that are present in AbstractMappingEventListener are:
|
||||
|
||||
* `onBeforeSave` - called in `CassandraTemplate#insert(...)` and `#update(...)` operations *before* inserting/updating record in the database.
|
||||
* `onAfterSave` - called in `CassandraTemplate#insert(...)` and `#update(...)` operations *after* inserting/updating record in the database.
|
||||
* `onBeforeDelete` - called in `CassandraTemplate#delete(Object, QueryOptions)` and `#delete(Object)` operations *before* deleting record from the database.
|
||||
* `onAfterDelete` - called in `CassandraTemplate#delete(Object, QueryOptions)` and `#delete(Object)` operations *after* deleting record from the database.
|
||||
* `onAfterLoad` - called in `CassandraTemplate#select(...)`, `#slice(...)`, and `#stream(...)` methods after record is retrieved from the database.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user