public class CassandraTemplate extends Object implements CassandraOperations, ApplicationEventPublisherAware, ApplicationContextAware
CassandraOperations
. It simplifies the use of Cassandra usage and helps to avoid
common errors. It executes core Cassandra workflow. This class executes CQL queries or updates, initiating iteration
over ResultSet
and catching Cassandra exceptions and translating them to the generic, more informative
exception hierarchy defined in the org.springframework.dao
package.
Can be used within a service implementation via direct instantiation with a CqlSession
reference, or get
prepared in an application context and given to services as bean reference.
This class supports the use of prepared statements when enabling setUsePreparedStatements(boolean)
. All
statements created by methods of this class (such as select(Query, Class)
or
update(Query, org.springframework.data.cassandra.core.query.Update, Class)
will be executed as prepared
statements. Also, statements accepted by methods (such as select(String, Class)
or
and others
) will be prepared prior to execution. Note that Statement
objects passed to methods must be SimpleStatement
so that these can be prepared.
Note: The CqlSession
should always be configured as a bean in the application context, in the first case
given to the service directly, in the second case to the prepared template.
CassandraOperations
Modifier and Type | Class and Description |
---|---|
static class |
CassandraTemplate.PreparedStatementHandler
Utility class to prepare a
SimpleStatement and bind values associated with the statement to a
BoundStatement . |
ExecutableSelectOperation.ExecutableSelect<T>, ExecutableSelectOperation.SelectWithProjection<T>, ExecutableSelectOperation.SelectWithQuery<T>, ExecutableSelectOperation.SelectWithTable<T>, ExecutableSelectOperation.TerminatingSelect<T>
ExecutableInsertOperation.ExecutableInsert<T>, ExecutableInsertOperation.InsertWithOptions<T>, ExecutableInsertOperation.InsertWithTable<T>, ExecutableInsertOperation.TerminatingInsert<T>
ExecutableUpdateOperation.ExecutableUpdate, ExecutableUpdateOperation.TerminatingUpdate, ExecutableUpdateOperation.UpdateWithQuery, ExecutableUpdateOperation.UpdateWithTable
ExecutableDeleteOperation.DeleteWithQuery, ExecutableDeleteOperation.DeleteWithTable, ExecutableDeleteOperation.ExecutableDelete, ExecutableDeleteOperation.TerminatingDelete
Constructor and Description |
---|
CassandraTemplate(CqlOperations cqlOperations,
CassandraConverter converter)
Creates an instance of
CassandraTemplate initialized with the given CqlOperations and
CassandraConverter . |
CassandraTemplate(com.datastax.oss.driver.api.core.CqlSession session)
Creates an instance of
CassandraTemplate initialized with the given CqlSession and a default
MappingCassandraConverter . |
CassandraTemplate(com.datastax.oss.driver.api.core.CqlSession session,
CassandraConverter converter)
Creates an instance of
CassandraTemplate initialized with the given CqlSession and
CassandraConverter . |
CassandraTemplate(SessionFactory sessionFactory,
CassandraConverter converter)
Creates an instance of
CassandraTemplate initialized with the given SessionFactory and
CassandraConverter . |
Modifier and Type | Method and Description |
---|---|
CassandraBatchOperations |
batchOps(com.datastax.oss.driver.api.core.cql.BatchType batchType)
Returns a new
CassandraBatchOperations . |
long |
count(Class<?> entityClass)
Returns the number of rows for the given entity class.
|
long |
count(Query query,
Class<?> entityClass)
Returns the number of rows for the given entity class applying
Query . |
ExecutableDeleteOperation.ExecutableDelete |
delete(Class<?> domainType)
Begin creating a
DELETE operation for the given domainType . |
void |
delete(Object entity)
Delete the given entity and return the entity if the delete was applied.
|
WriteResult |
delete(Object entity,
QueryOptions options)
Delete the given entity applying
QueryOptions and return the entity if the delete was applied. |
boolean |
delete(Query query,
Class<?> entityClass)
Remove entities (rows)/columns from the table by
Query . |
boolean |
deleteById(Object id,
Class<?> entityClass)
Remove the given object from the table by id.
|
com.datastax.oss.driver.api.core.cql.ResultSet |
execute(com.datastax.oss.driver.api.core.cql.Statement<?> statement)
Execute the a Cassandra
Statement . |
boolean |
exists(Object id,
Class<?> entityClass)
Determine whether a row of
entityClass with the given id exists. |
boolean |
exists(Query query,
Class<?> entityClass)
Determine whether the result for
entityClass Query yields at least one row. |
CassandraConverter |
getConverter()
Returns the underlying
CassandraConverter . |
CqlOperations |
getCqlOperations()
Expose the underlying
CqlOperations to allow CQL operations. |
protected org.springframework.data.cassandra.core.EntityOperations |
getEntityOperations()
Returns the
EntityOperations used to perform data access operations on an entity inside a Cassandra data
source. |
protected SpelAwareProxyProjectionFactory |
getProjectionFactory()
Returns a reference to the configured
ProjectionFactory used by this template to process CQL query
projections. |
protected StatementFactory |
getStatementFactory()
Returns the
StatementFactory used by this template to construct and run Cassandra CQL statements. |
com.datastax.oss.driver.api.core.CqlIdentifier |
getTableName(Class<?> entityClass)
The table name used for the specified class by this template.
|
<T> ExecutableInsertOperation.ExecutableInsert<T> |
insert(Class<T> domainType)
Begin creating an
INSERT operation for given domainType . |
<T> T |
insert(T entity)
Insert the given entity and return the entity if the insert was applied.
|
<T> EntityWriteResult<T> |
insert(T entity,
InsertOptions options)
Insert the given entity applying
WriteOptions and return the entity if the insert was applied. |
boolean |
isUsePreparedStatements()
Returns whether this instance is configured to use
prepared statements . |
protected <T> T |
maybeCallBeforeConvert(T object,
com.datastax.oss.driver.api.core.CqlIdentifier tableName) |
protected <T> T |
maybeCallBeforeSave(T object,
com.datastax.oss.driver.api.core.CqlIdentifier tableName,
com.datastax.oss.driver.api.core.cql.Statement<?> statement) |
protected <E extends CassandraMappingEvent<T>,T> |
maybeEmitEvent(E event) |
<T> ExecutableSelectOperation.ExecutableSelect<T> |
query(Class<T> domainType)
Begin creating a Cassandra
SELECT query operation for the given domainType . |
<T> List<T> |
select(Query query,
Class<T> entityClass)
Execute a
SELECT query and convert the resulting items to a List of entities. |
<T> List<T> |
select(com.datastax.oss.driver.api.core.cql.Statement<?> statement,
Class<T> entityClass)
Execute a
SELECT query and convert the resulting items to a List of entities. |
<T> List<T> |
select(String cql,
Class<T> entityClass)
Execute a
SELECT query and convert the resulting items to a List of entities. |
<T> T |
selectOne(Query query,
Class<T> entityClass)
Execute a
SELECT query and convert the resulting item to an entity. |
<T> T |
selectOne(com.datastax.oss.driver.api.core.cql.Statement<?> statement,
Class<T> entityClass)
Execute a
SELECT query and convert the resulting item to an entity. |
<T> T |
selectOne(String cql,
Class<T> entityClass)
Execute a
SELECT query and convert the resulting item to an entity. |
<T> T |
selectOneById(Object id,
Class<T> entityClass)
Execute the Select by
id for the given entityClass . |
void |
setApplicationContext(ApplicationContext applicationContext) |
void |
setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) |
void |
setEntityCallbacks(EntityCallbacks entityCallbacks)
Configure
EntityCallbacks to pre-/post-process entities during persistence operations. |
void |
setUsePreparedStatements(boolean usePreparedStatements)
Enable/disable
prepared statements usage. |
<T> Slice<T> |
slice(Query query,
Class<T> entityClass)
Execute a
SELECT query with paging and convert the result set to a Slice of entities. |
<T> Slice<T> |
slice(com.datastax.oss.driver.api.core.cql.Statement<?> statement,
Class<T> entityClass)
Execute a
SELECT query with paging and convert the result set to a Slice of entities. |
<T> Stream<T> |
stream(Query query,
Class<T> entityClass)
Execute a
SELECT query and convert the resulting items to a Iterator of entities. |
<T> Stream<T> |
stream(com.datastax.oss.driver.api.core.cql.Statement<?> statement,
Class<T> entityClass)
Execute a
SELECT query and convert the resulting items to a Iterator of entities. |
<T> Stream<T> |
stream(String cql,
Class<T> entityClass)
Execute a
SELECT query and convert the resulting items to a Iterator of entities. |
void |
truncate(Class<?> entityClass)
Execute a
TRUNCATE query to remove all entities of a given class. |
ExecutableUpdateOperation.ExecutableUpdate |
update(Class<?> domainType)
Begin creating an
UPDATE operation for the given domainType . |
boolean |
update(Query query,
Update update,
Class<?> entityClass)
Update the queried entities and return true if the update was applied.
|
<T> T |
update(T entity)
Update the given entity and return the entity if the update was applied.
|
<T> EntityWriteResult<T> |
update(T entity,
UpdateOptions options)
Update the given entity applying
WriteOptions and return the entity if the update was applied. |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
batchOps, delete
public CassandraTemplate(com.datastax.oss.driver.api.core.CqlSession session)
CassandraTemplate
initialized with the given CqlSession
and a default
MappingCassandraConverter
.session
- CqlSession
used to interact with Cassandra; must not be null.CassandraConverter
,
Session
public CassandraTemplate(com.datastax.oss.driver.api.core.CqlSession session, CassandraConverter converter)
CassandraTemplate
initialized with the given CqlSession
and
CassandraConverter
.session
- CqlSession
used to interact with Cassandra; must not be null.converter
- CassandraConverter
used to convert between Java and Cassandra types; must not be
null.CassandraConverter
,
Session
public CassandraTemplate(SessionFactory sessionFactory, CassandraConverter converter)
CassandraTemplate
initialized with the given SessionFactory
and
CassandraConverter
.sessionFactory
- SessionFactory
used to interact with Cassandra; must not be null.converter
- CassandraConverter
used to convert between Java and Cassandra types; must not be
null.CassandraConverter
,
SessionFactory
public CassandraTemplate(CqlOperations cqlOperations, CassandraConverter converter)
CassandraTemplate
initialized with the given CqlOperations
and
CassandraConverter
.cqlOperations
- CqlOperations
used to interact with Cassandra; must not be null.converter
- CassandraConverter
used to convert between Java and Cassandra types; must not be
null.CassandraConverter
,
Session
public CassandraBatchOperations batchOps(com.datastax.oss.driver.api.core.cql.BatchType batchType)
CassandraOperations
CassandraBatchOperations
. Each CassandraBatchOperations
instance can be executed only
once, so you need to obtain new CassandraBatchOperations
instances for each batch.batchOps
in interface CassandraOperations
batchType
- must not be null.ReactiveCassandraBatchOperations
associated with the given entity class.public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)
setApplicationEventPublisher
in interface ApplicationEventPublisherAware
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
setApplicationContext
in interface ApplicationContextAware
BeansException
public void setEntityCallbacks(@Nullable EntityCallbacks entityCallbacks)
EntityCallbacks
to pre-/post-process entities during persistence operations.entityCallbacks
- public CqlOperations getCqlOperations()
CassandraOperations
CqlOperations
to allow CQL operations.getCqlOperations
in interface CassandraOperations
CqlOperations
.CqlOperations
public CassandraConverter getConverter()
CassandraOperations
CassandraConverter
.getConverter
in interface CassandraOperations
CassandraConverter
.public boolean isUsePreparedStatements()
prepared statements
. If enabled
(default), then all persistence methods (such as select(java.lang.String, java.lang.Class<T>)
, update(org.springframework.data.cassandra.core.query.Query, org.springframework.data.cassandra.core.query.Update, java.lang.Class<?>)
, and others) will make use of
prepared statements. Note that methods accepting a Statement
must be called with SimpleStatement
instances to participate in statement preparation.public void setUsePreparedStatements(boolean usePreparedStatements)
prepared statements
usage. If enabled (default), then all persistence
methods (such as select(java.lang.String, java.lang.Class<T>)
, update(org.springframework.data.cassandra.core.query.Query, org.springframework.data.cassandra.core.query.Update, java.lang.Class<?>)
, and others) will make use of prepared statements. Note that
methods accepting a Statement
must be called with SimpleStatement
instances to participate in
statement preparation.usePreparedStatements
- whether to use prepared statements.protected org.springframework.data.cassandra.core.EntityOperations getEntityOperations()
EntityOperations
used to perform data access operations on an entity inside a Cassandra data
source.EntityOperations
for this template.EntityOperations
protected SpelAwareProxyProjectionFactory getProjectionFactory()
ProjectionFactory
used by this template to process CQL query
projections.ProjectionFactory
used by this template to process CQL query
projections.SpelAwareProxyProjectionFactory
protected StatementFactory getStatementFactory()
StatementFactory
used by this template to construct and run Cassandra CQL statements.StatementFactory
used by this template to construct and run Cassandra CQL statements.StatementFactory
public com.datastax.oss.driver.api.core.CqlIdentifier getTableName(Class<?> entityClass)
CassandraOperations
getTableName
in interface CassandraOperations
entityClass
- The entity type must not be null.CqlIdentifier
public <T> List<T> select(String cql, Class<T> entityClass)
CassandraOperations
SELECT
query and convert the resulting items to a List
of entities.select
in interface CassandraOperations
cql
- must not be null.entityClass
- The entity type must not be null.public <T> T selectOne(String cql, Class<T> entityClass)
CassandraOperations
SELECT
query and convert the resulting item to an entity.selectOne
in interface CassandraOperations
cql
- must not be null.entityClass
- The entity type must not be null.public <T> Stream<T> stream(String cql, Class<T> entityClass) throws DataAccessException
CassandraOperations
SELECT
query and convert the resulting items to a Iterator
of entities.
Returns a Iterator
that wraps the Cassandra com.datastax.driver.core.ResultSet
.
stream
in interface CassandraOperations
T
- element return type.cql
- query to execute. Must not be empty or null.entityClass
- Class type of the elements in the Iterator
stream. Must not be null.Iterator
(stream) over the elements in the query result set.DataAccessException
- if there is any problem executing the query.public com.datastax.oss.driver.api.core.cql.ResultSet execute(com.datastax.oss.driver.api.core.cql.Statement<?> statement)
CassandraOperations
Statement
. Any errors that result from executing this command will be converted
into Spring's DAO exception hierarchy.execute
in interface CassandraOperations
statement
- a Cassandra Statement
, must not be null.ResultSet
.public <T> List<T> select(com.datastax.oss.driver.api.core.cql.Statement<?> statement, Class<T> entityClass)
CassandraOperations
SELECT
query and convert the resulting items to a List
of entities.select
in interface CassandraOperations
statement
- must not be null.entityClass
- The entity type must not be null.public <T> T selectOne(com.datastax.oss.driver.api.core.cql.Statement<?> statement, Class<T> entityClass)
CassandraOperations
SELECT
query and convert the resulting item to an entity.selectOne
in interface CassandraOperations
statement
- must not be null.entityClass
- The entity type must not be null.public <T> Slice<T> slice(com.datastax.oss.driver.api.core.cql.Statement<?> statement, Class<T> entityClass)
CassandraOperations
SELECT
query with paging and convert the result set to a Slice
of entities. A sliced
query translates the effective fetch size
to the page size.slice
in interface CassandraOperations
statement
- the CQL statement, must not be null.entityClass
- The entity type must not be null.public <T> Stream<T> stream(com.datastax.oss.driver.api.core.cql.Statement<?> statement, Class<T> entityClass) throws DataAccessException
CassandraOperations
SELECT
query and convert the resulting items to a Iterator
of entities.
Returns a Iterator
that wraps the Cassandra com.datastax.driver.core.ResultSet
.
stream
in interface CassandraOperations
T
- element return type.statement
- query to execute. Must not be empty or null.entityClass
- Class type of the elements in the Iterator
stream. Must not be null.Iterator
(stream) over the elements in the query result set.DataAccessException
- if there is any problem executing the query.public <T> List<T> select(Query query, Class<T> entityClass) throws DataAccessException
CassandraOperations
SELECT
query and convert the resulting items to a List
of entities.select
in interface CassandraOperations
query
- must not be null.entityClass
- The entity type must not be null.DataAccessException
- if there is any problem executing the query.public <T> T selectOne(Query query, Class<T> entityClass) throws DataAccessException
CassandraOperations
SELECT
query and convert the resulting item to an entity.selectOne
in interface CassandraOperations
query
- must not be null.entityClass
- The entity type must not be null.DataAccessException
- if there is any problem executing the query.public <T> Slice<T> slice(Query query, Class<T> entityClass) throws DataAccessException
CassandraOperations
SELECT
query with paging and convert the result set to a Slice
of entities.slice
in interface CassandraOperations
query
- the query object used to create a CQL statement, must not be null.entityClass
- The entity type must not be null.DataAccessException
- if there is any problem executing the query.CassandraPageRequest
public <T> Stream<T> stream(Query query, Class<T> entityClass) throws DataAccessException
CassandraOperations
SELECT
query and convert the resulting items to a Iterator
of entities.
Returns a Iterator
that wraps the Cassandra com.datastax.driver.core.ResultSet
.
stream
in interface CassandraOperations
T
- element return type.query
- query to execute. Must not be empty or null.entityClass
- Class type of the elements in the Iterator
stream. Must not be null.Iterator
(stream) over the elements in the query result set.DataAccessException
- if there is any problem executing the query.public boolean update(Query query, Update update, Class<?> entityClass) throws DataAccessException
CassandraOperations
update
in interface CassandraOperations
query
- must not be null.update
- must not be null.entityClass
- The entity type must not be null.DataAccessException
- if there is any problem executing the query.public boolean delete(Query query, Class<?> entityClass) throws DataAccessException
CassandraOperations
Query
.delete
in interface CassandraOperations
query
- must not be null.entityClass
- The entity type must not be null.DataAccessException
- if there is any problem executing the query.public long count(Class<?> entityClass)
CassandraOperations
count
in interface CassandraOperations
entityClass
- type
of the entity; must not be null.public long count(Query query, Class<?> entityClass) throws DataAccessException
CassandraOperations
Query
. This overridden method allows users
to further refine the selection criteria using a Query
predicate to determine how many entities of the
given type
match the criteria.count
in interface CassandraOperations
query
- user-defined count Query
to execute; must not be null.entityClass
- type
of the entity; must not be null.DataAccessException
- if any problem occurs while executing the query.public boolean exists(Object id, Class<?> entityClass)
CassandraOperations
entityClass
with the given id
exists.exists
in interface CassandraOperations
id
- Id value. For single primary keys it's the plain value. For composite primary keys either, it's an
instance of either PrimaryKeyClass
or
MapId
. Must not be null.entityClass
- type
of the entity; must not be null.public boolean exists(Query query, Class<?> entityClass) throws DataAccessException
CassandraOperations
entityClass
Query
yields at least one row.exists
in interface CassandraOperations
query
- user-defined exists Query
to execute; must not be null.entityClass
- type
of the entity; must not be null.DataAccessException
- if any problem occurs while executing the query.public <T> T selectOneById(Object id, Class<T> entityClass)
CassandraOperations
id
for the given entityClass
.selectOneById
in interface CassandraOperations
id
- the Id value. For single primary keys it's the plain value. For composite primary keys either the
PrimaryKeyClass
or
MapId
. Must not be null.entityClass
- The entity type must not be null.public <T> T insert(T entity)
CassandraOperations
insert
in interface CassandraOperations
entity
- The entity to insert, must not be null.public <T> EntityWriteResult<T> insert(T entity, InsertOptions options)
CassandraOperations
WriteOptions
and return the entity if the insert was applied.insert
in interface CassandraOperations
entity
- The entity to insert, must not be null.options
- must not be null.EntityWriteResult
for this operation.InsertOptions.empty()
public <T> T update(T entity)
CassandraOperations
update
in interface CassandraOperations
entity
- The entity to update, must not be null.public <T> EntityWriteResult<T> update(T entity, UpdateOptions options)
CassandraOperations
WriteOptions
and return the entity if the update was applied.update
in interface CassandraOperations
entity
- The entity to update, must not be null.options
- must not be null.EntityWriteResult
for this operation.UpdateOptions.empty()
public void delete(Object entity)
CassandraOperations
delete
in interface CassandraOperations
entity
- must not be null.public WriteResult delete(Object entity, QueryOptions options)
CassandraOperations
QueryOptions
and return the entity if the delete was applied.delete
in interface CassandraOperations
entity
- must not be null.options
- must not be null.WriteResult
for this operation.QueryOptions.empty()
public boolean deleteById(Object id, Class<?> entityClass)
CassandraOperations
deleteById
in interface CassandraOperations
id
- the Id value. For single primary keys it's the plain value. For composite primary keys either the
PrimaryKeyClass
or
MapId
. Must not be null.entityClass
- The entity type must not be null.public void truncate(Class<?> entityClass)
CassandraOperations
TRUNCATE
query to remove all entities of a given class.truncate
in interface CassandraOperations
entityClass
- The entity type must not be null.public <T> ExecutableSelectOperation.ExecutableSelect<T> query(Class<T> domainType)
ExecutableSelectOperation
SELECT
query operation for the given domainType
.query
in interface ExecutableSelectOperation
T
- type
of the application domain object.domainType
- type
to domain object to query; must not be null.ExecutableSelectOperation.ExecutableSelect
.ExecutableSelectOperation.ExecutableSelect
public <T> ExecutableInsertOperation.ExecutableInsert<T> insert(Class<T> domainType)
ExecutableInsertOperation
INSERT
operation for given domainType
.insert
in interface ExecutableInsertOperation
domainType
- type
of domain object to insert; must not be null.ExecutableInsertOperation.ExecutableInsert
.ExecutableInsertOperation.ExecutableInsert
public ExecutableUpdateOperation.ExecutableUpdate update(Class<?> domainType)
ExecutableUpdateOperation
UPDATE
operation for the given domainType
.update
in interface ExecutableUpdateOperation
domainType
- type
of domain object to update; must not be null.ExecutableUpdateOperation.ExecutableUpdate
.public ExecutableDeleteOperation.ExecutableDelete delete(Class<?> domainType)
ExecutableDeleteOperation
DELETE
operation for the given domainType
.delete
in interface ExecutableDeleteOperation
domainType
- type
of domain object to delete; must not be null.ExecutableDeleteOperation.ExecutableDelete
.ExecutableDeleteOperation.ExecutableDelete
protected <E extends CassandraMappingEvent<T>,T> void maybeEmitEvent(E event)
protected <T> T maybeCallBeforeConvert(T object, com.datastax.oss.driver.api.core.CqlIdentifier tableName)
protected <T> T maybeCallBeforeSave(T object, com.datastax.oss.driver.api.core.CqlIdentifier tableName, com.datastax.oss.driver.api.core.cql.Statement<?> statement)
Copyright © 2011–2021 Pivotal Software, Inc.. All rights reserved.