diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/PrimaryKeyClassEntityMetadataVerifier.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/PrimaryKeyClassEntityMetadataVerifier.java index 871d62e3d..468bcb0fb 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/PrimaryKeyClassEntityMetadataVerifier.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/PrimaryKeyClassEntityMetadataVerifier.java @@ -62,12 +62,6 @@ public class PrimaryKeyClassEntityMetadataVerifier implements CassandraPersisten Table.class.getSimpleName(), PrimaryKeyClass.class.getSimpleName()))); } - // Ensure PrimaryKeyClass only extends Object - if (!entityType.getSuperclass().equals(Object.class)) { - exceptions.add( - new MappingException(String.format("@%s must only extend Object", PrimaryKeyClass.class.getSimpleName()))); - } - entity.forEach(property -> { if (property.isCompositePrimaryKey()) { compositePrimaryKeys.add(property); @@ -93,7 +87,7 @@ public class PrimaryKeyClassEntityMetadataVerifier implements CassandraPersisten entity.getType().getName(), PrimaryKeyColumn.class.getSimpleName()))); } - // At least one of the PrimaryKeyColumns must have a type PARTIONED + // At least one of the PrimaryKeyColumns must have a type PARTITIONED if (partitionKeyColumns.isEmpty()) { exceptions .add(new MappingException(String.format("At least one of the @%s annotations must have a type of PARTITIONED", diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/PrimaryKeyClassEntityMetadataVerifierUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/PrimaryKeyClassEntityMetadataVerifierUnitTests.java index 5d91aab8f..4f5260ca7 100644 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/PrimaryKeyClassEntityMetadataVerifierUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/PrimaryKeyClassEntityMetadataVerifierUnitTests.java @@ -131,15 +131,9 @@ class PrimaryKeyClassEntityMetadataVerifierUnitTests { } } - @Test // DATACASS-258 - void shouldFailForPrimaryKeyDerivedFromOtherThanObject() { - - try { + @Test // DATACASS-258, #1126 + void shouldAllowPrimaryKeyDerivedFromOtherThanObject() { verifier.verify(getEntity(SubclassPK.class)); - fail("Missing MappingException"); - } catch (MappingException e) { - assertThat(e).hasMessageContaining("@PrimaryKeyClass must only extend Object"); - } } @Test // DATACASS-213 diff --git a/src/main/asciidoc/reference/mapping.adoc b/src/main/asciidoc/reference/mapping.adoc index 8ef3a5899..e96c6008f 100644 --- a/src/main/asciidoc/reference/mapping.adoc +++ b/src/main/asciidoc/reference/mapping.adoc @@ -312,7 +312,7 @@ include::../{example-root}/LoginEvent.java[tags=class] ==== Primary Key Class A primary key class is a composite primary key class that is mapped to multiple fields or properties of the entity. -It is annotated with `@PrimaryKeyClass` and must define `equals` and `hashCode` methods. +It is annotated with `@PrimaryKeyClass` and should define `equals` and `hashCode` methods. The semantics of value equality for these methods should be consistent with the database equality for the database types to which the key is mapped. Primary key classes can be used with repositories (as the `Id` type) and to represent an entity's identity in a single complex object. The following example shows a composite primary key class: