From d33e391dbbf922928cb06bdcccceafd0b3f594ea Mon Sep 17 00:00:00 2001
From: Alex Shvid
Date: Mon, 2 Dec 2013 16:06:34 -0800
Subject: [PATCH 1/4] compound keys renaming
---
.../AbstractCassandraConfiguration.java | 11 ++---
.../data/cassandra/mapping/CompoundKey.java | 45 +++++++++++++++++++
...{CompositeRowId.java => PartitionKey.java} | 16 +------
3 files changed, 53 insertions(+), 19 deletions(-)
create mode 100644 spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CompoundKey.java
rename spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/{CompositeRowId.java => PartitionKey.java} (73%)
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java
index 0009d0010..2baf1030a 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java
@@ -22,7 +22,6 @@ import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.cassandra.core.CassandraOperations;
import org.springframework.cassandra.core.CassandraTemplate;
-import org.springframework.data.cassandra.core.SpringDataKeyspace;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.context.annotation.Configuration;
@@ -32,9 +31,11 @@ import org.springframework.data.cassandra.convert.CassandraConverter;
import org.springframework.data.cassandra.convert.MappingCassandraConverter;
import org.springframework.data.cassandra.core.CassandraAdminOperations;
import org.springframework.data.cassandra.core.CassandraAdminTemplate;
+import org.springframework.data.cassandra.core.SpringDataKeyspace;
import org.springframework.data.cassandra.mapping.CassandraMappingContext;
import org.springframework.data.cassandra.mapping.CassandraPersistentEntity;
import org.springframework.data.cassandra.mapping.CassandraPersistentProperty;
+import org.springframework.data.cassandra.mapping.CompoundKey;
import org.springframework.data.cassandra.mapping.Table;
import org.springframework.data.mapping.context.MappingContext;
import org.springframework.util.ClassUtils;
@@ -74,8 +75,8 @@ public abstract class AbstractCassandraConfiguration implements BeanClassLoaderA
public abstract Cluster cluster() throws Exception;
/**
- * Creates a {@link Session} to be used by the {@link SpringDataKeyspace}. Will use the {@link Cluster} instance configured in
- * {@link #cluster()}.
+ * Creates a {@link Session} to be used by the {@link SpringDataKeyspace}. Will use the {@link Cluster} instance
+ * configured in {@link #cluster()}.
*
* @see #cluster()
* @see #Keyspace()
@@ -93,8 +94,8 @@ public abstract class AbstractCassandraConfiguration implements BeanClassLoaderA
}
/**
- * Creates a {@link SpringDataKeyspace} to be used by the {@link CassandraTemplate}. Will use the {@link Session} instance
- * configured in {@link #session()} and {@link CassandraConverter} configured in {@link #converter()}.
+ * Creates a {@link SpringDataKeyspace} to be used by the {@link CassandraTemplate}. Will use the {@link Session}
+ * instance configured in {@link #session()} and {@link CassandraConverter} configured in {@link #converter()}.
*
* @see #cluster()
* @see #Keyspace()
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CompoundKey.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CompoundKey.java
new file mode 100644
index 000000000..f059d4f65
--- /dev/null
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CompoundKey.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2010-2013 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.data.cassandra.mapping;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Identifies compound keys class in the Cassandra table that contains several fields. Same as
+ *
+ * @org.springframework.data.annotation.Id
+ *
+ * Example:
+ *
+ * @CompoundKey class AccountPK { String account; String region; }
+ *
+ * @Table class Account {
+ * @PrimaryKey AccountPK pk; }
+ *
+ *
+ * @author Alex Shvid
+ */
+
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.TYPE })
+public @interface CompoundKey {
+
+}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CompositeRowId.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PartitionKey.java
similarity index 73%
rename from spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CompositeRowId.java
rename to spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PartitionKey.java
index 2ceca4e1d..8a340e855 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/CompositeRowId.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PartitionKey.java
@@ -20,25 +20,13 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.springframework.data.annotation.Id;
-
/**
- * Identifies composite row ID in the Cassandra table that contains several fields. Same as
- * @org.springframework.data.annotation.Id
- *
- * Example:
- *
- * class AccountPK { String account; String region; }
- *
- * @Table class Account {
- * @CompositeRowId Account pk; }
- *
+ * Identifies partition key in the Cassandra compound key class.
*
* @author Alex Shvid
*/
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE })
-@Id
-public @interface CompositeRowId {
+public @interface PartitionKey {
}
From b0b1a6e926344c52bfd8be1b8714cff5608aa67e Mon Sep 17 00:00:00 2001
From: Alex Shvid
Date: Mon, 2 Dec 2013 16:15:43 -0800
Subject: [PATCH 2/4] rename @RowId to @PrimaryKey same as in CQL3
---
.../cassandra/mapping/BasicCassandraPersistentProperty.java | 2 +-
.../data/cassandra/mapping/{RowId.java => PrimaryKey.java} | 2 +-
.../data/cassandra/test/integration/table/Book.java | 4 ++--
.../data/cassandra/test/integration/table/LogEntry.java | 4 ++--
4 files changed, 6 insertions(+), 6 deletions(-)
rename spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/{RowId.java => PrimaryKey.java} (97%)
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/BasicCassandraPersistentProperty.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/BasicCassandraPersistentProperty.java
index c77b95204..51ecfcf5d 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/BasicCassandraPersistentProperty.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/BasicCassandraPersistentProperty.java
@@ -61,7 +61,7 @@ public class BasicCassandraPersistentProperty extends AnnotationBasedPersistentP
return true;
}
- return getField().isAnnotationPresent(RowId.class);
+ return getField().isAnnotationPresent(PrimaryKey.class);
}
/**
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/RowId.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PrimaryKey.java
similarity index 97%
rename from spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/RowId.java
rename to spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PrimaryKey.java
index 10ef7608a..19a6f0440 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/RowId.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PrimaryKey.java
@@ -30,5 +30,5 @@ import org.springframework.data.annotation.Id;
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE })
@Id
-public @interface RowId {
+public @interface PrimaryKey {
}
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Book.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Book.java
index b5e07e29f..e647f9da1 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Book.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/Book.java
@@ -15,7 +15,7 @@
*/
package org.springframework.data.cassandra.test.integration.table;
-import org.springframework.data.cassandra.mapping.RowId;
+import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
/**
@@ -27,7 +27,7 @@ import org.springframework.data.cassandra.mapping.Table;
@Table(name = "book")
public class Book {
- @RowId
+ @PrimaryKey
private String isbn;
private String title;
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java
index 5797dec9f..a32e71095 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java
@@ -19,7 +19,7 @@ import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.cassandra.mapping.Column;
-import org.springframework.data.cassandra.mapping.RowId;
+import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
/**
@@ -37,7 +37,7 @@ public class LogEntry {
/*
* Primary Row ID
*/
- @RowId
+ @PrimaryKey
private Date logDate;
private String hostname;
From 9ae9984102979cf25df0775077735713e6210960 Mon Sep 17 00:00:00 2001
From: Alex Shvid
Date: Mon, 2 Dec 2013 18:02:40 -0800
Subject: [PATCH 3/4] findByPartitionKey added to SimpleCassandraRepository
---
.../cassandra/repository/CassandraRepository.java | 3 +++
.../support/SimpleCassandraRepository.java | 14 ++++++++++++++
.../cassandra/test/integration/table/LogEntry.java | 2 --
3 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/CassandraRepository.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/CassandraRepository.java
index a2c245c6e..e8ed41547 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/CassandraRepository.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/CassandraRepository.java
@@ -16,6 +16,7 @@
package org.springframework.data.cassandra.repository;
import java.io.Serializable;
+import java.util.List;
import org.springframework.data.repository.CrudRepository;
@@ -26,4 +27,6 @@ import org.springframework.data.repository.CrudRepository;
*/
public interface CassandraRepository extends CrudRepository {
+ List findByPartitionKey(ID id);
+
}
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java
index 385a768ed..8bc527e4e 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/repository/support/SimpleCassandraRepository.java
@@ -108,6 +108,20 @@ public class SimpleCassandraRepository implements Ca
return cassandraDataTemplate.selectOne(select, entityInformation.getJavaType());
}
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.data.cassandra.repository.CassandraRepository#findByPartitionKey(java.io.Serializable)
+ */
+ @Override
+ public List findByPartitionKey(ID id) {
+ Assert.notNull(id, "The given id must not be null!");
+
+ Select select = QueryBuilder.select().all().from(entityInformation.getTableName());
+ select.where(getIdClause(id));
+
+ return cassandraDataTemplate.select(select, entityInformation.getJavaType());
+ }
+
/*
* (non-Javadoc)
* @see org.springframework.data.repository.CrudRepository#exists(java.io.Serializable)
diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java
index a32e71095..0e5d7a7fb 100644
--- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java
+++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/LogEntry.java
@@ -17,8 +17,6 @@ package org.springframework.data.cassandra.test.integration.table;
import java.util.Date;
-import org.springframework.data.annotation.Id;
-import org.springframework.data.cassandra.mapping.Column;
import org.springframework.data.cassandra.mapping.PrimaryKey;
import org.springframework.data.cassandra.mapping.Table;
From d9dd7d1605197d039e5e31bf10be2d05749455e2 Mon Sep 17 00:00:00 2001
From: Alex Shvid
Date: Mon, 2 Dec 2013 21:08:51 -0800
Subject: [PATCH 4/4] composite primary key support
---
.../AbstractCassandraConfiguration.java | 1 -
.../core/CassandraAdminTemplate.java | 2 +-
.../core/CassandraKeyspaceFactoryBean.java | 3 +-
.../BasicCassandraPersistentEntity.java | 8 -
.../BasicCassandraPersistentProperty.java | 23 ++-
.../CachingCassandraPersistentProperty.java | 31 ++--
.../mapping/CassandraPersistentProperty.java | 11 +-
...poundKey.java => CompositePrimaryKey.java} | 12 +-
.../mapping/{ColumnId.java => Id.java} | 7 +-
.../mapping/{Index.java => Indexed.java} | 2 +-
.../data/cassandra/mapping/PartitionKey.java | 32 ----
.../{PrimaryKey.java => Partitioned.java} | 9 +-
.../data/cassandra/util/CqlUtils.java | 82 ++++++---
...draPersistentPropertyIntegrationTests.java | 8 -
.../test/integration/table/Book.java | 4 +-
.../test/integration/table/Comment.java | 37 +---
.../test/integration/table/CommentPK.java | 63 +++++++
.../test/integration/table/LogEntry.java | 11 +-
.../test/integration/table/Notification.java | 34 +---
.../integration/table/NotificationPK.java | 65 +++++++
.../test/integration/table/Post.java | 29 +---
.../test/integration/table/PostPK.java | 63 +++++++
.../test/integration/table/Timeline.java | 27 +--
.../test/integration/table/TimelinePK.java | 63 +++++++
.../test/integration/table/User.java | 4 +-
.../test/integration/table/UserAlter.java | 161 ------------------
26 files changed, 405 insertions(+), 387 deletions(-)
rename spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/{CompoundKey.java => CompositePrimaryKey.java} (75%)
rename spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/{ColumnId.java => Id.java} (85%)
rename spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/{Index.java => Indexed.java} (97%)
delete mode 100644 spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/PartitionKey.java
rename spring-data-cassandra/src/main/java/org/springframework/data/cassandra/mapping/{PrimaryKey.java => Partitioned.java} (84%)
create mode 100644 spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/CommentPK.java
create mode 100644 spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/NotificationPK.java
create mode 100644 spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/PostPK.java
create mode 100644 spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/TimelinePK.java
delete mode 100644 spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/integration/table/UserAlter.java
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java
index 2baf1030a..c8cc1b262 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/config/AbstractCassandraConfiguration.java
@@ -35,7 +35,6 @@ import org.springframework.data.cassandra.core.SpringDataKeyspace;
import org.springframework.data.cassandra.mapping.CassandraMappingContext;
import org.springframework.data.cassandra.mapping.CassandraPersistentEntity;
import org.springframework.data.cassandra.mapping.CassandraPersistentProperty;
-import org.springframework.data.cassandra.mapping.CompoundKey;
import org.springframework.data.cassandra.mapping.Table;
import org.springframework.data.mapping.context.MappingContext;
import org.springframework.util.ClassUtils;
diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java
index ad530226f..eff4dd3d1 100644
--- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java
+++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraAdminTemplate.java
@@ -83,7 +83,7 @@ public class CassandraAdminTemplate implements CassandraAdminOperations {
execute(new SessionCallback