DATAMONGO-1782 - Detect type cycles using PersistentProperty paths.
We now rely on PersistentProperty paths to detect cycles between types. Cycles are detected when building up the path object and traversing PersistentProperty stops after the cycle was hit for the second time to generated indexes for at least one hierarchy level.
Previously, we used String-based property dot paths and compared whether paths to a particular property was already found by a substring search which caused false positives if a property was reachable via multiple paths.
Original Pull Request: #500
pull/521/merge
Mark Paluch8 years agocommitted byChristoph Strobl
@ -99,7 +108,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -99,7 +108,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -113,7 +122,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -113,7 +122,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -136,31 +145,35 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -136,31 +145,35 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -174,7 +187,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -174,7 +187,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -212,8 +225,8 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -212,8 +225,8 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -229,15 +242,16 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -229,15 +242,16 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -250,6 +264,8 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -250,6 +264,8 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -262,7 +278,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -262,7 +278,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -291,7 +307,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -291,7 +307,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -482,53 +498,38 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -482,53 +498,38 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -549,39 +550,113 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@@ -549,39 +550,113 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver {
@ -65,7 +65,7 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@@ -65,7 +65,7 @@ public class MongoPersistentEntityIndexResolverUnitTests {
/**
*Testresolutionof{@linkIndexed}.
*
*
*@authorChristophStrobl
*/
publicstaticclassIndexResolutionTests{
@ -310,7 +310,7 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@@ -310,7 +310,7 @@ public class MongoPersistentEntityIndexResolverUnitTests {
/**
*Testresolutionof{@linkGeoSpatialIndexed}.
*
*
*@authorChristophStrobl
*/
publicstaticclassGeoSpatialIndexResolutionTests{
@ -423,7 +423,7 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@@ -423,7 +423,7 @@ public class MongoPersistentEntityIndexResolverUnitTests {
/**
*Testresolutionof{@linkCompoundIndexes}.
*
*
*@authorChristophStrobl
*/
publicstaticclassCompoundIndexResolutionTests{
@ -914,6 +914,17 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@@ -914,6 +914,17 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@ -1071,6 +1082,25 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@@ -1071,6 +1082,25 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@IndexedStringfoo;
}
@Document(collection="rules")
staticclassNoCycleManyPathsToDeepValueObject{
privateNoCycleLevel3l3;
privateNoCycleLevel2l2;
}
staticclassNoCycleLevel2{
privateNoCycleLevel3l3;
}
staticclassNoCycleLevel3{
privateValueObjectvalueObject;
}
staticclassValueObject{
@IndexedprivateStringvalue;
}
@Document
staticclassSimilarityHolingBean{
@ -1187,7 +1217,6 @@ public class MongoPersistentEntityIndexResolverUnitTests {
@@ -1187,7 +1217,6 @@ public class MongoPersistentEntityIndexResolverUnitTests {