Revert "Omit annotations from the repository and domaintype in CrudMethodMetadata. (#1170)"

This reverts commit 99414aab2c.
This commit is contained in:
mikereiche
2021-08-10 21:29:29 -07:00
parent 99414aab2c
commit 0983e6609b
3 changed files with 10 additions and 23 deletions

View File

@@ -145,6 +145,7 @@ class CrudMethodMetadataPostProcessor implements RepositoryProxyPostProcessor, B
currentInvocation.set(invocation);
try {
CrudMethodMetadata metadata = (CrudMethodMetadata) TransactionSynchronizationManager.getResource(method);
if (metadata != null) {
@@ -155,7 +156,7 @@ class CrudMethodMetadataPostProcessor implements RepositoryProxyPostProcessor, B
if (methodMetadata == null) {
methodMetadata = new DefaultCrudMethodMetadata(method);
methodMetadata = new DefaultCrudMethodMetadata(method, repositoryInformation);
CrudMethodMetadata tmp = metadataCache.putIfAbsent(method, methodMetadata);
if (tmp != null) {
@@ -186,6 +187,7 @@ class CrudMethodMetadataPostProcessor implements RepositoryProxyPostProcessor, B
private final Method method;
private final ScanConsistency scanConsistency;
private final RepositoryInformation repositoryInformation;
private final String scope;
private final String collection;
@@ -196,9 +198,10 @@ class CrudMethodMetadataPostProcessor implements RepositoryProxyPostProcessor, B
*
* @param method must not be {@literal null}.
*/
DefaultCrudMethodMetadata(Method method) {
DefaultCrudMethodMetadata(Method method, RepositoryInformation repositoryInformation) {
Assert.notNull(method, "Method must not be null!");
this.method = method;
this.repositoryInformation = repositoryInformation;
String n = method.getName();
// internal methods
if (n.equals("getEntityInformation") || n.equals("getOperations") || n.equals("withOptions")
@@ -209,7 +212,8 @@ class CrudMethodMetadataPostProcessor implements RepositoryProxyPostProcessor, B
return;
}
AnnotatedElement[] annotated = new AnnotatedElement[] { method, method.getDeclaringClass()};
AnnotatedElement[] annotated = new AnnotatedElement[] { method, method.getDeclaringClass(),
repositoryInformation.getRepositoryInterface(), repositoryInformation.getDomainType() };
this.scanConsistency = OptionsBuilder.annotation(ScanConsistency.class, "query", QueryScanConsistency.NOT_BOUNDED,
annotated);
this.scope = OptionsBuilder.annotationString(Scope.class, CollectionIdentifier.DEFAULT_SCOPE, annotated);

View File

@@ -38,9 +38,7 @@ import com.couchbase.client.java.query.QueryScanConsistency;
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
public interface UserColRepository extends CouchbaseRepository<UserCol, String>, DynamicProxyable<UserColRepository> {
// CouchbaseRepositoryQueryCollectionIntegrationTests.testScopeCollectionAnnotationSwap() relies on this
// being commented out.
//<S extends UserCol> S save(S var1);
<S extends UserCol> S save(S var1);
List<UserCol> findByFirstname(String firstname);

View File

@@ -15,7 +15,6 @@
*/
package org.springframework.data.couchbase.repository.query;
import static com.couchbase.client.core.io.CollectionIdentifier.DEFAULT_SCOPE;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -179,7 +178,7 @@ public class CouchbaseRepositoryQueryCollectionIntegrationTests extends Collecti
// scope
List<UserCol> found = userColRepository.withCollection(otherCollection).findByFirstname(user.getFirstname());
assertEquals(saved, found.get(0), "should have found what was saved");
List<UserCol> notfound = userColRepository.withScope(DEFAULT_SCOPE)
List<UserCol> notfound = userColRepository.withScope(CollectionIdentifier.DEFAULT_SCOPE)
.withCollection(CollectionIdentifier.DEFAULT_COLLECTION).findByFirstname(user.getFirstname());
assertEquals(0, notfound.size(), "should not have found what was saved");
} finally {
@@ -189,20 +188,6 @@ public class CouchbaseRepositoryQueryCollectionIntegrationTests extends Collecti
}
}
@Test
public void testScopeCollectionAnnotationSwap() {
// UserCol annotation scope is other_scope, collection is other_collection
// airportRepository relies on Config.setScopeName(scopeName) ("my_scope") from CollectionAwareIntegrationTests.
// using airportRepository without specified a collection should fail.
// This test ensures that airportRepository.save(airport) doesn't get the
// collection from CrudMethodMetadata of UserCol.save()
UserCol userCol = new UserCol("1", "Dave", "Wilson");
Airport airport = new Airport("3", "myIata", "myIcao");
UserCol savedCol = userColRepository.save(userCol); // uses UserCol annotation scope, populates CrudMethodMetadata
userColRepository.delete(userCol); // uses UserCol annotation scope, populates CrudMethodMetadata
assertThrows(IllegalStateException.class, () -> airportRepository.save(airport));
}
// template default scope is my_scope
// UserCol annotation scope is other_scope
@Test
@@ -213,7 +198,7 @@ public class CouchbaseRepositoryQueryCollectionIntegrationTests extends Collecti
List<UserCol> found = userColRepository.withScope(scopeName).withCollection(collectionName)
.findByFirstname(user.getFirstname());
assertEquals(saved, found.get(0), "should have found what was saved");
List<UserCol> notfound = userColRepository.withScope(DEFAULT_SCOPE)
List<UserCol> notfound = userColRepository.withScope(CollectionIdentifier.DEFAULT_SCOPE)
.withCollection(CollectionIdentifier.DEFAULT_COLLECTION).findByFirstname(user.getFirstname());
assertEquals(0, notfound.size(), "should not have found what was saved");
userColRepository.withScope(scopeName).withCollection(collectionName).delete(user);