Git Product home page Git Product logo

spring-projects / spring-data-cassandra Goto Github PK

View Code? Open in Web Editor NEW
341.0 68.0 276.0 14.77 MB

Provides support to increase developer productivity in Java when using Apache Cassandra. Uses familiar Spring concepts such as a template classes for core API usage and lightweight repository style data access.

Home Page:

License: Apache License 2.0

Java 96.15% Shell 0.03% Kotlin 3.79% Dockerfile 0.03%
ddd java cassandra spring spring-data framework cql

spring-data-cassandra's Introduction

Spring Data for Apache Cassandra Spring Data for Apache Cassandra

Spring Data for Apache Cassandra icon?job=spring data cassandra%2Fmain&subject=Build Gitter

The primary goal of the Spring Data project is to make it easier to build Spring-powered applications that use new data access technologies such as non-relational databases, map-reduce frameworks, and cloud based data services.

The Apache Cassandra NoSQL Database offers many new capabilities for teams seeking a solution to handle high velocity, high volume and variable data flows. This new way of thinking introduces new concepts and a learning curve that can be intimidating to team members and team managers. Spring Data for Apache Cassandra offers a familiar interface to those who have used other Spring Data modules in the past.

The learning curve for developing applications with Apache Cassandra is significantly reduced when using Spring Data for Apache Cassandra. With the power to stay at a high level with annotated POJOs, or at a low level with high performance data ingestion capabilities, the Spring Data for Apache Cassandra templates are sure to meet every application need.


  • Build repositories based on common Spring Data interfaces

  • Support for synchronous, reactive, and asynchronous data operations

  • Support for XML based Keyspace creation and CQL Table creation

  • JavaConfig and XML Support for all Cluster and Session Capabilities

  • Exception Translation to the familiar Spring DataAccessException hierarchy

  • Convenient QueryBuilders to eliminate the need to learn CQL

  • Automatic implementation of Repository interfaces including support for custom query methods

  • Based on the 4.x DataStax CQL Java Driver

Code of Conduct

This project is governed by the Spring Code of Conduct. By participating, you are expected to uphold this code of conduct. Please report unacceptable behavior to [email protected].

Getting Started

Here is a quick teaser of an application using Spring Data Repositories in Java:

public interface PersonRepository extends CrudRepository<Person, Long> {

  List<Person> findByLastname(String lastname);

  List<Person> findByFirstnameLike(String firstname);

public class MyService {

  private final PersonRepository repository;

  public MyService(PersonRepository repository) {
    this.repository = repository;

  public void doWork() {


    Person person = new Person();

    List<Person> lastNameResults = repository.findByLastname("Adams");
    List<Person> firstNameResults = repository.findByFirstnameLike("M*");

class ApplicationConfig extends AbstractCassandraConfiguration {

  public String getContactPoints() {
    return "localhost";

  protected String getKeyspaceName() {
    return "springdata";

Maven configuration

Add the Maven dependency:


If you’d rather like the latest snapshots of the upcoming major version, use our Maven snapshot repository and declare the appropriate dependency version.


  <name>Spring Snapshot Repository</name>

Getting Help

Having trouble with Spring Data? We’d love to help!

Reporting Issues

Spring Data uses GitHub as issue tracking system to record bugs and feature requests. If you want to raise an issue, please follow the recommendations below:

  • Before you log a bug, please search the issue tracker to see if someone has already reported the problem.

  • If the issue does not already exist, create a new issue.

  • Please provide as much information as possible with the issue report, we like to know the version of Spring Data that you are using and JVM version.

  • If you need to paste code, or include a stack trace use Markdown ``` escapes before and after your text.

  • If possible try to create a test-case or project that replicates the issue. Attach a link to your code or a compressed file containing your code.

Building from Source

You don’t need to build from source to use Spring Data (binaries in, but if you want to try out the latest and greatest, Spring Data can be easily built with the maven wrapper. You also need JDK 1.8.

 $ ./mvnw clean install

If you want to build with the regular mvn command, you will need Maven v3.5.0 or above.

Also see CONTRIBUTING.adoc if you wish to submit pull requests, and in particular please sign the Contributor’s Agreement before your first non-trivial change.

Initial Contributors

Spring Data for Apache Cassandra was initially created and supported by the following companies and individuals:

Building reference documentation

Building the documentation builds also the project without running tests.

 $ ./mvnw clean install -Pdistribute

The generated documentation is available from target/site/reference/html/index.html.



Spring Data for Apache Cassandra is Open Source software released under the Apache 2.0 license.

spring-data-cassandra's People


mp911de avatar matthewadams avatar prowave avatar odrotbohm avatar jxblum avatar christophstrobl avatar alexshvid avatar gregturn avatar schauder avatar spring-builds avatar john-mcpeek avatar sdeleuze avatar samueldlightfoot avatar Buzzardo avatar atoulme avatar chaodhib avatar lukasz-antoniak avatar petercable avatar stefanbirkner avatar sksumit1 avatar tomekl007 avatar aholmberg avatar aldobongio avatar azotcsit avatar akhaku avatar wilkinsona avatar CharlesZKQ avatar chbatey avatar CodeSmell avatar andricDu avatar


Denisov Mikhail avatar adaigo avatar  avatar Jonas avatar Vihaan avatar Henry Mogollón avatar Hai Nguyen avatar  avatar Suraj Dubey avatar Noah Hsiao avatar  avatar  avatar Aliaksei Bialiauski avatar  avatar Mujahed Alaqqad avatar Steve Todorov avatar Viraj Kaushalye avatar Mateus Romão avatar Dominic Stew avatar MoNe  avatar HyeongGun Lee, Henry avatar  avatar  avatar markus herbert avatar Valentyn Berezin avatar Taras Maslov avatar Kim avatar  avatar  avatar Alex Tool avatar Jogeswar avatar  avatar  avatar Rostov avatar  avatar Srinivas avatar Pierre LASSIALE avatar Eko Kurniawan Khannedy avatar Zhao Xiaohong avatar Ozgur DEMIREL avatar djlnet avatar caoyixiong avatar Andreas Mager avatar 冷沐 avatar  avatar  avatar STYLIANOS IORDANIS avatar HabinKim avatar  avatar Damian Festowski avatar Estevam Meneses avatar Marcel Körtgen avatar  avatar  avatar Felipe Marson Vinturini avatar pcccppc2 avatar tsundara avatar Priyanka Kotnis avatar lijunjie avatar Theo van Kraay avatar Максим Тарасов avatar Pranav Bolar avatar michaelbi avatar linzai avatar sudotty avatar Mohamed Aboshosha avatar Madhurima  avatar George Kontridze avatar pattern_academy avatar  avatar 정수현 avatar Arjun Sunil Kumar avatar Abhimanyu avatar Muizz Mahdy avatar  avatar Fuxing Loh avatar 翟志军 avatar Kotlin Student avatar Francisco Llaryora avatar  avatar  avatar Simon Kingston avatar J.C avatar Raymond LE MARRON avatar  avatar  avatar newbetoo avatar Tom Sandmann avatar Kevin Tham avatar eric avatar caolong avatar Boris Korogvich avatar Wilfried avatar  avatar Hung Nguyen avatar Nick Russler avatar guqing avatar Tomasz Lelek avatar  avatar  avatar


Libing Chen avatar Ryan Morgan avatar Josh Long avatar Oliver Drotbohm avatar Wayne Lund avatar Ilayaperumal Gopinathan avatar  avatar Craig Walls avatar Steve Bohlen avatar Chris Richardson avatar Greg L. Turnquist avatar Thomas Darimont avatar Mehdi Lefebvre avatar Roberto Lezama Gutierrez avatar Jeremy Grelle avatar Rahul Singh avatar Matthew Adams avatar Jeremy Kuhnash avatar Sushant Sood avatar  avatar James Cloos avatar David Turanski avatar  avatar Jarred Li avatar Ken Guzik avatar  avatar Nieraj Singh avatar Brian Dussault avatar Rodrigo A. Bartels avatar Pa1 avatar HuangJinSheng avatar Antony avatar  avatar  avatar 张伟 avatar James Chang avatar  avatar Christoph Strobl avatar  avatar Gavin.C avatar Will Schipp avatar Chirag Tailor avatar  avatar  avatar  avatar Alex Tool avatar  avatar  avatar  avatar John Blum avatar Ahmet avatar  avatar  avatar  avatar  avatar  avatar  avatar Thabo Ndashe avatar  avatar 跨乔丹 avatar adaigo avatar Kotlin Student avatar Rostov avatar  avatar  avatar Gangadharan avatar  avatar Dominic Stew avatar

spring-data-cassandra's Issues

Better PreparedStatement Support [DATACASS-39]

David Webb opened DATACASS-39 and commented

Currently we have a PreparedStatementCreator very similar to Spring-JDBC. This needs to be tuned for better usability given how the DataStax Driver actually uses BoundStatement for execution.

Need support for:

  1. Caching a PreparedStatement for many operations

Affects: 1.0 M1 (Dijkstra)

This issue is a sub-task of DATACASS-32

Pagination Support [DATACASS-8]

David Webb opened DATACASS-8 and commented

Pagination is not supported or a best practice in Cassandra. The next closest alternative is the concept of range queries, which may product a story for this epic

Issue Links:

  • DATACASS-56 Support pagination feature in Cassandra

3 votes, 5 watchers

Ability to initialize CassandraTemplate with default parameters

There should be an ability to bootstrap spring-data-cassandra without having to explicitly create a CassandraTemplate bean. Some defaults (host: localhost, port 9042) can be used to initialize the template automatically. This would make it easy for folks to get started on using spring-data-cassandra. Other Spring Data implementations such as spring-data-mongo has this type of feature.

Consistency levels

I can't find any documentation on setting consistency level on operations. Can it be done? On what level? How?

Data Type Mapping for Longs

The CassandraSimpleTypeHolder static block iterates over the DataStax driver's DataType.allPrimitiveTypes() to map the driver's dataTypes by java class.

BIGINT and COUNTER datatypes both map to Long.class, BIGINT get's put in the dataTypesByJavaClass map first but then gets overwritten by COUNTER, which results in the default mapping for a Long property to be a COUNTER.
Should not Longs properties map to BIGINT by default and counter properties explicitly annotated accordingly? In which case the static block probably needs a Long -> BIGINT override.

Support for Configuring QueryOptions in Repositories

The Repositories configured currently do not pass any QueryOptions when running a query. Although the QueryOptions are query based it would be great if we could configure the QueryOptions in Repositories at an annotation level.

Refactor XML Namespace [DATACASS-37]

David Webb opened DATACASS-37 and commented

Once we have hashed out all the implementations and separation of spring-cassandra and spring-data-cassandra, we need to split the XSD file into the 2 components so that the Templates can be used independently of one another

No further details from DATACASS-37

Support custom field mappings [DATACASS-83]

Matthew T. Adams opened DATACASS-83 and commented

Users need to be able to map fields from Java to database types in standard and custom ways. This request is to provide support for standard & custom (user-defined) field mappings when going from Java to C* & vice versa.

This request include support for both annotation- and external metadata-based means (XML, YAML, properties, etc), where annotations override spring-data-cassandra defaults, and external metadata overrides annotations

Affects: 1.0 M1 (Dijkstra)

Issue Links:

  • DATACASS-141 Support for enumeration mapping
    ("is depended on by")
  • DATACASS-128 Improve mapping specifications between Cassandra & Java

1 votes, 4 watchers

Cluster Connection Listener [DATACASS-38]

David Webb opened DATACASS-38 and commented

CassandraClusterFactoryBean (and the XML Configuration) need to be modified so that the developer can configure Host.StateListener and LatencyTracker.

These interface implementations can be registered with the cluster after it is returned from Cluster.Builder

Affects: 1.0 M1 (Dijkstra)

Referenced from: commits d348f35

Create verifier for entity persistence metadata [DATACASS-85]

Matthew T. Adams opened DATACASS-85 and commented

We need to ensure that users are annotating their persistent entities in a logically consistent way.

For example, you can't annotate an entity with both a @PrimaryKey property and another property whose type is a @PrimaryKeyClass itself -- this would mean that the class had a composite primary key and a simple primary key at the same time.

I've already written a basic interface, CassandraPersistentEntityMetadataValidator, with the beginnings of an implementation, DefaultCassandraPersistentEntityMetadataValidator (attached).

The validation should take place in BasicCassandraPersistentEntity#verify(). Files attached

Affects: 1.0 M1 (Dijkstra)


Referenced from: commits d4849e5, c91a70b, b1226eb, 56aec13, 8caf9aa, 646dc0d, 5be12f4, f93496f, 3368a68, 873ff26, 591cdab

No support for a string query in QueryBuilder

I have the below query which is of type String:

String cql = "insert into person(name, age, id) values ('sunny',22,'2800')";

I need to get this string insert query into QueryBuilder something like:
Insert insertStmnt = QueryBuilder.createQuery(cql); and then use
CassandraTemplate.execute(Insert insert) method

Currenlty there is no support to accept a string query inside QueryBuilder. Also I prefer not to parse the String query to retrieve the query components like table name, values etc.

WriteOptions not allowing using timestamp

I am currently working on setting up the using options for an insert statement using WriteOptions/QueryOptions class. To my surprise, prior to this set and get methods for timestamp were allowed in WriteOptions. May I know why has this been deleted and how can i use the below feature:

insert into table(.....) values(.....) using timestamp 1240003134;

Convert to Maven & split modules [DATACASS-40]

Matthew T. Adams opened DATACASS-40 and commented

Convert to Maven to align with parent project and other Spring-sponsored projects. This includes splitting the codebase into two modules: spring-cassandra, for CassandraTemplate & friends, and spring-data-cassandra, for the Spring Data Cassandra POJO-based repositories & mapping

Affects: 1.0 M1 (Dijkstra)

Convert CassandraFactoryBean to a legit FactoryBean [DATACASS-25]

David Webb opened DATACASS-25 and commented

The current CassandraFactoryBean is not named correctly, and it doesn't implement the basic required interfaces for Spring Beans.

New Class definition to implement:

public class KeyspaceFactoryBean implements FactoryBean<Keyspace>, InitializingBean, DisposableBean,
	PersistenceExceptionTranslator {}

Affects: 1.0 M1 (Dijkstra)

Is @Lob annotation in a POJO supported?

I have a POJO that is mapped to a table and one of the fields in that POJO is a custom Java object that is annotated by @lob. I expect that field to be saved to a BLOB column but instead the libraries are looking for information to serialize that Java object. How do I handle this issue? Should I define my own custom mapper?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.