Browse Source

Refine customization of `EntityInformation`.

We now provide a getEntityInformation(RepositoryMetadata) customization hook for EntityInformation creation as several modules require access to RepositoryMetadata details (such as the Id type).

Closes #3288
pull/3304/head
Mark Paluch 7 months ago
parent
commit
368fe71e48
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 2
      src/main/java/org/springframework/data/repository/core/support/RepositoryFactoryBeanSupport.java
  2. 17
      src/main/java/org/springframework/data/repository/core/support/RepositoryFactorySupport.java
  3. 3
      src/test/java/org/springframework/data/repository/core/support/DummyReactiveRepositoryFactory.java
  4. 3
      src/test/java/org/springframework/data/repository/core/support/DummyRepositoryFactory.java
  5. 3
      src/test/java/org/springframework/data/repository/core/support/ReactiveDummyRepositoryFactory.java

2
src/main/java/org/springframework/data/repository/core/support/RepositoryFactoryBeanSupport.java

@ -261,7 +261,7 @@ public abstract class RepositoryFactoryBeanSupport<T extends Repository<S, ID>, @@ -261,7 +261,7 @@ public abstract class RepositoryFactoryBeanSupport<T extends Repository<S, ID>,
@SuppressWarnings("unchecked")
public EntityInformation<S, ID> getEntityInformation() {
return (EntityInformation<S, ID>) getRequiredFactory()
.getEntityInformation(getRequiredRepositoryMetadata().getDomainType());
.getEntityInformation(getRequiredRepositoryMetadata());
}
@Override

17
src/main/java/org/springframework/data/repository/core/support/RepositoryFactorySupport.java

@ -534,8 +534,23 @@ public abstract class RepositoryFactorySupport @@ -534,8 +534,23 @@ public abstract class RepositoryFactorySupport
* @param <ID> the id type
* @param domainClass
* @return
* @deprecated since 4.0, use {@link #getEntityInformation(RepositoryMetadata)} instead.
*/
public abstract <T, ID> EntityInformation<T, ID> getEntityInformation(Class<T> domainClass);
@Deprecated(since = "4.0")
public <T, ID> EntityInformation<T, ID> getEntityInformation(Class<T> domainClass) {
throw new UnsupportedOperationException("getEntityInformation is not implemented");
}
/**
* Returns the {@link EntityInformation} for the given {@link RepositoryMetadata}.
*
* @param metadata must not be {@literal null}.
* @return the {@link EntityInformation} to be used for {@link RepositoryMetadata}.
* @since 4.0
*/
public EntityInformation<?, ?> getEntityInformation(RepositoryMetadata metadata) {
return getEntityInformation(metadata.getDomainType());
}
/**
* Create a repository instance as backing for the query proxy.

3
src/test/java/org/springframework/data/repository/core/support/DummyReactiveRepositoryFactory.java

@ -54,8 +54,7 @@ public class DummyReactiveRepositoryFactory extends ReactiveRepositoryFactorySup @@ -54,8 +54,7 @@ public class DummyReactiveRepositoryFactory extends ReactiveRepositoryFactorySup
}
@Override
@SuppressWarnings("unchecked")
public <T, ID> EntityInformation<T, ID> getEntityInformation(Class<T> domainClass) {
public EntityInformation<?, ?> getEntityInformation(RepositoryMetadata metadata) {
return mock(EntityInformation.class);
}

3
src/test/java/org/springframework/data/repository/core/support/DummyRepositoryFactory.java

@ -77,8 +77,7 @@ public class DummyRepositoryFactory extends RepositoryFactorySupport { @@ -77,8 +77,7 @@ public class DummyRepositoryFactory extends RepositoryFactorySupport {
}
@Override
@SuppressWarnings("unchecked")
public <T, ID> EntityInformation<T, ID> getEntityInformation(Class<T> domainClass) {
public EntityInformation<?, ?> getEntityInformation(RepositoryMetadata metadata) {
return mock(EntityInformation.class);
}

3
src/test/java/org/springframework/data/repository/core/support/ReactiveDummyRepositoryFactory.java

@ -77,8 +77,7 @@ public class ReactiveDummyRepositoryFactory extends ReactiveRepositoryFactorySup @@ -77,8 +77,7 @@ public class ReactiveDummyRepositoryFactory extends ReactiveRepositoryFactorySup
}
@Override
@SuppressWarnings("unchecked")
public <T, ID> EntityInformation<T, ID> getEntityInformation(Class<T> domainClass) {
public EntityInformation<?, ?> getEntityInformation(RepositoryMetadata metadata) {
return mock(EntityInformation.class);
}

Loading…
Cancel
Save