diff --git a/pom.xml b/pom.xml
index 87b7e95ebe..d972b6798e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-relational-parent
- 1.2.0.BUILD-SNAPSHOT
+ 1.2.0.DATAJDBC-437-SNAPSHOT
pom
Spring Data Relational Parent
diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml
index f2bbb72319..71c531216f 100644
--- a/spring-data-jdbc-distribution/pom.xml
+++ b/spring-data-jdbc-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 1.2.0.BUILD-SNAPSHOT
+ 1.2.0.DATAJDBC-437-SNAPSHOT
../pom.xml
diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml
index 0904eb8136..93ca35b98c 100644
--- a/spring-data-jdbc/pom.xml
+++ b/spring-data-jdbc/pom.xml
@@ -5,7 +5,7 @@
4.0.0
spring-data-jdbc
- 1.2.0.BUILD-SNAPSHOT
+ 1.2.0.DATAJDBC-437-SNAPSHOT
Spring Data JDBC
Spring Data module for JDBC repositories.
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 1.2.0.BUILD-SNAPSHOT
+ 1.2.0.DATAJDBC-437-SNAPSHOT
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java
index b860a8204d..31100661f8 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtension.java
@@ -15,10 +15,14 @@
*/
package org.springframework.data.jdbc.repository.config;
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Locale;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.data.jdbc.repository.support.JdbcRepositoryFactoryBean;
+import org.springframework.data.relational.core.mapping.Table;
import org.springframework.data.repository.config.RepositoryConfigurationExtensionSupport;
import org.springframework.data.repository.config.RepositoryConfigurationSource;
import org.springframework.util.StringUtils;
@@ -75,4 +79,12 @@ public void postProcess(BeanDefinitionBuilder builder, RepositoryConfigurationSo
.filter(StringUtils::hasText) //
.ifPresent(s -> builder.addPropertyReference("dataAccessStrategy", s));
}
+
+ /**
+ * In strict mode only domain types having a {@link Table} annotation get a repository.
+ */
+ @Override
+ protected Collection> getIdentifyingAnnotations() {
+ return Collections.singleton(Table.class);
+ }
}
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java
index 165463d865..bcde8cd6d8 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/support/JdbcRepositoryFactory.java
@@ -120,7 +120,7 @@ protected Object getTargetRepository(RepositoryInformation repositoryInformation
JdbcAggregateTemplate template = new JdbcAggregateTemplate(publisher, context, converter, accessStrategy);
SimpleJdbcRepository, Object> repository = new SimpleJdbcRepository<>(template,
- context.getPersistentEntity(repositoryInformation.getDomainType()));
+ context.getRequiredPersistentEntity(repositoryInformation.getDomainType()));
if (entityCallbacks != null) {
template.setEntityCallbacks(entityCallbacks);
diff --git a/spring-data-jdbc/src/main/resources/META-INF/spring.factories b/spring-data-jdbc/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000000..f244d7b51f
--- /dev/null
+++ b/spring-data-jdbc/src/main/resources/META-INF/spring.factories
@@ -0,0 +1 @@
+org.springframework.data.repository.core.support.RepositoryFactorySupport=org.springframework.data.jdbc.repository.support.JdbcRepositoryFactory
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryCrossAggregateHsqlIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryCrossAggregateHsqlIntegrationTests.java
index 7b654486cb..300b00b8b6 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryCrossAggregateHsqlIntegrationTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryCrossAggregateHsqlIntegrationTests.java
@@ -15,7 +15,7 @@
*/
package org.springframework.data.jdbc.repository;
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.*;
import org.junit.ClassRule;
import org.junit.Rule;
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIdGenerationIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIdGenerationIntegrationTests.java
index 7b3d2a2401..07a864ddb5 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIdGenerationIntegrationTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryIdGenerationIntegrationTests.java
@@ -31,6 +31,7 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.Import;
import org.springframework.data.annotation.Id;
import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories;
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryManipulateDbActionsIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryManipulateDbActionsIntegrationTests.java
index d14b27e93b..e61f1f991c 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryManipulateDbActionsIntegrationTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryManipulateDbActionsIntegrationTests.java
@@ -33,7 +33,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.Import;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.PersistenceConstructor;
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryQueryMappingConfigurationIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryQueryMappingConfigurationIntegrationTests.java
index 0bf20dca16..9a6a4798a0 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryQueryMappingConfigurationIntegrationTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryQueryMappingConfigurationIntegrationTests.java
@@ -15,7 +15,10 @@
*/
package org.springframework.data.jdbc.repository;
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.*;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -43,9 +46,6 @@
import org.springframework.test.context.junit4.rules.SpringMethodRule;
import org.springframework.transaction.annotation.Transactional;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
/**
* Very simple use cases for creation and usage of {@link ResultSetExtractor}s in JdbcRepository.
*
@@ -66,7 +66,7 @@ static class Config {
Class> testClass() {
return JdbcRepositoryQueryMappingConfigurationIntegrationTests.class;
}
-
+
@Bean
QueryMappingConfiguration mappers() {
return new DefaultQueryMappingConfiguration();
@@ -78,7 +78,7 @@ QueryMappingConfiguration mappers() {
@Autowired NamedParameterJdbcTemplate template;
@Autowired CarRepository carRepository;
-
+
@Test // DATAJDBC-290
public void customFindAllCarsUsesConfiguredResultSetExtractor() {
@@ -88,28 +88,27 @@ public void customFindAllCarsUsesConfiguredResultSetExtractor() {
assertThat(cars).hasSize(1);
assertThat(cars).allMatch(car -> CAR_MODEL.equals(car.getModel()));
}
-
+
interface CarRepository extends CrudRepository {
@Query(value = "select * from car", resultSetExtractorClass = CarResultSetExtractor.class)
List customFindAll();
}
-
+
@Data
@AllArgsConstructor
static class Car {
- @Id
- private Long id;
+ @Id private Long id;
private String model;
}
-
+
static class CarResultSetExtractor implements ResultSetExtractor> {
@Override
public List extractData(ResultSet rs) throws SQLException, DataAccessException {
return Arrays.asList(new Car(1L, CAR_MODEL));
}
-
+
}
}
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtensionUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtensionUnitTests.java
new file mode 100644
index 0000000000..7805fa2d01
--- /dev/null
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/config/JdbcRepositoryConfigExtensionUnitTests.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2019 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
+ *
+ * https://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.jdbc.repository.config;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.Collection;
+
+import org.junit.Test;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.StandardEnvironment;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.type.StandardAnnotationMetadata;
+import org.springframework.data.relational.core.mapping.Table;
+import org.springframework.data.repository.Repository;
+import org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource;
+import org.springframework.data.repository.config.RepositoryConfiguration;
+import org.springframework.data.repository.config.RepositoryConfigurationSource;
+
+/**
+ * Unit tests for {@link JdbcRepositoryConfigExtension}.
+ *
+ * @author Jens Schauder
+ */
+public class JdbcRepositoryConfigExtensionUnitTests {
+
+ StandardAnnotationMetadata metadata = new StandardAnnotationMetadata(Config.class, true);
+ ResourceLoader loader = new PathMatchingResourcePatternResolver();
+ Environment environment = new StandardEnvironment();
+ BeanDefinitionRegistry registry = new DefaultListableBeanFactory();
+
+ RepositoryConfigurationSource configurationSource = new AnnotationRepositoryConfigurationSource(metadata,
+ EnableJdbcRepositories.class, loader, environment, registry);
+
+ @Test // DATAJPA-437
+ public void isStrictMatchOnlyIfDomainTypeIsAnnotatedWithDocument() {
+
+ JdbcRepositoryConfigExtension extension = new JdbcRepositoryConfigExtension();
+
+ Collection> configs = extension
+ .getRepositoryConfigurations(configurationSource, loader, true);
+
+ assertThat(configs).extracting(config -> config.getRepositoryInterface())
+ .containsExactly(SampleRepository.class.getName());
+ }
+
+ @EnableJdbcRepositories(considerNestedRepositories = true)
+ static class Config {
+
+ }
+
+ @Table
+ static class Sample {}
+
+ interface SampleRepository extends Repository {}
+
+ static class Unannotated {}
+
+ interface UnannotatedRepository extends Repository {}
+}
diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml
index 1751c4244e..2da15cb40e 100644
--- a/spring-data-relational/pom.xml
+++ b/spring-data-relational/pom.xml
@@ -5,7 +5,7 @@
4.0.0
spring-data-relational
- 1.2.0.BUILD-SNAPSHOT
+ 1.2.0.DATAJDBC-437-SNAPSHOT
Spring Data Relational
Spring Data Relational support
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-relational-parent
- 1.2.0.BUILD-SNAPSHOT
+ 1.2.0.DATAJDBC-437-SNAPSHOT