Lifecycle Events

Spring Data JDBC triggers events that get published to any matching ApplicationListener beans in the application context. For example, the following listener gets invoked before an aggregate gets saved:

@Bean
public ApplicationListener<BeforeSave> timeStampingSaveTime() {

	return event -> {

		Object entity = event.getEntity();
		if (entity instanceof Category) {
			Category category = (Category) entity;
			category.timeStamp();
		}
	};
}

The following table describes the available events:

Table 1. Available events
Event When It Is Published

BeforeDeleteEvent

Before an aggregate root gets deleted.

AfterDeleteEvent

After an aggregate root gets deleted.

BeforeConvertEvent

Before an aggregate root gets saved (that is, inserted or updated but after the decision about whether if it gets updated or deleted was made).

BeforeSaveEvent

Before an aggregate root gets saved (that is, inserted or updated but after the decision about whether if it gets updated or deleted was made).

AfterSaveEvent

After an aggregate root gets saved (that is, inserted or updated).

AfterLoadEvent

After an aggregate root gets created from a database ResultSet and all its property get set.

Lifecycle events depend on an ApplicationEventMulticaster, which in case of the SimpleApplicationEventMulticaster can be configured with a TaskExecutor, and therefore gives no guarantees when an Event is processed.

Store-specific EntityCallbacks

Spring Data JDBC uses the EntityCallback API for its auditing support and reacts on the following callbacks:

Table 2. Available Callbacks
EntityCallback When It Is Published

BeforeDeleteCallback

Before an aggregate root gets deleted.

AfterDeleteCallback

After an aggregate root gets deleted.

BeforeConvertCallback

Before an aggregate root gets saved (that is, inserted or updated but after the decision about whether if it gets updated or deleted was made).

BeforeSaveCallback

Before an aggregate root gets saved (that is, inserted or updated but after the decision about whether if it gets updated or deleted was made).

AfterSaveCallback

After an aggregate root gets saved (that is, inserted or updated).

AfterLoadCallback

After an aggregate root gets created from a database ResultSet and all its property get set.