From 314bbb12612bbfd5998c0d0494bbdc26ce327196 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 26 Feb 2019 14:51:03 +0100 Subject: [PATCH] DATACASS-633 - Silently traverse CassandraPersistentEntity associations. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BasicCassandraPersistentEntity.doWithAssociations(…) now no longer throws UnsupportedCassandraOperationException when trying to traverse associations. Calling doWithAssociations results in a no-op as there are no associations. Related ticket: DATAREST-1337. --- .../BasicCassandraPersistentEntity.java | 1 - ...sicCassandraPersistentEntityUnitTests.java | 37 +++++++++++++++---- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntity.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntity.java index 31e567ee5..12407c787 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntity.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntity.java @@ -143,7 +143,6 @@ public class BasicCassandraPersistentEntity extends BasicPersistentEntity handler) { - throw new UnsupportedCassandraOperationException("Cassandra does not support associations"); } /* (non-Javadoc) diff --git a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntityUnitTests.java b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntityUnitTests.java index 4b2f6a1f1..4837d2e98 100755 --- a/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntityUnitTests.java +++ b/spring-data-cassandra/src/test/java/org/springframework/data/cassandra/core/mapping/BasicCassandraPersistentEntityUnitTests.java @@ -15,19 +15,14 @@ */ package org.springframework.data.cassandra.core.mapping; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.isA; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import java.util.Optional; import org.junit.Test; import org.junit.runner.RunWith; @@ -38,6 +33,8 @@ import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.ApplicationContext; import org.springframework.core.annotation.AliasFor; import org.springframework.data.cassandra.core.cql.CqlIdentifier; +import org.springframework.data.mapping.Association; +import org.springframework.data.mapping.AssociationHandler; import org.springframework.data.util.ClassTypeInformation; /** @@ -151,6 +148,30 @@ public class BasicCassandraPersistentEntityUnitTests { assertThat(entity.isCompositePrimaryKey()).isTrue(); } + @Test // DATACASS-633 + @SuppressWarnings("unchecked") + public void shouldRejectAssociationCreation() { + + BasicCassandraPersistentEntity entity = new BasicCassandraPersistentEntity<>( + ClassTypeInformation.from(PrimaryKeyClassWithComposedAnnotation.class)); + + assertThatThrownBy(() -> entity.addAssociation(mock(Association.class))) + .isInstanceOf(UnsupportedCassandraOperationException.class); + } + + @Test // DATACASS-633 + @SuppressWarnings("unchecked") + public void shouldNoOpOnDoWithAssociations() { + + BasicCassandraPersistentEntity entity = new BasicCassandraPersistentEntity<>( + ClassTypeInformation.from(PrimaryKeyClassWithComposedAnnotation.class)); + + AssociationHandler handlerMock = mock(AssociationHandler.class); + entity.doWithAssociations(handlerMock); + + verifyZeroInteractions(handlerMock); + } + @Table("messages") static class Message {}