Avoid creating invalid index definitions for Map-like properties.
This commit makes sure to exclude Map like structures from index inspection unless annotated with WilcardIndexed.
Closes#3914, closes#3901
Original pull request: #3915.
pull/3960/head
Christoph Strobl4 years agocommitted byMark Paluch
@ -157,6 +157,10 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -157,6 +157,10 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -217,6 +221,10 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -217,6 +221,10 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -346,6 +354,10 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -346,6 +354,10 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -798,6 +810,10 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -798,6 +810,10 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -1393,6 +1393,15 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@@ -1393,6 +1393,15 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@ -1626,6 +1635,17 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@@ -1626,6 +1635,17 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@ -402,12 +402,17 @@ Indexes are automatically created for the initial entity set on application star
@@ -402,12 +402,17 @@ Indexes are automatically created for the initial entity set on application star
We generally recommend explicit index creation for application-based control of indexes as Spring Data cannot automatically create indexes for collections that were recreated while the application was running.
`IndexResolver` provides an abstraction for programmatic index definition creation if you want to make use of `@Indexed` annotations such as `@GeoSpatialIndexed`, `@TextIndexed`, `@CompoundIndex`.
`IndexResolver` provides an abstraction for programmatic index definition creation if you want to make use of `@Indexed` annotations such as `@GeoSpatialIndexed`, `@TextIndexed`, `@CompoundIndex` and `@WildcardIndexed`.
You can use index definitions with `IndexOperations` to create indexes.
A good point in time for index creation is on application startup, specifically after the application context was refreshed, triggered by observing `ContextRefreshedEvent`.
This event guarantees that the context is fully initialized.
Note that at this time other components, especially bean factories might have access to the MongoDB database.
[WARNING]
===
`Map` like structures, unless annotated with `@WildcardIndexed`, are skipped by the `IndexResolver` because the _map key_, which cannot be resolved from static metadata, needs to be part of the index definition.
===
.Programmatic Index Creation for a single Domain Type