DATAES-260 - StacOverflow when two reverse relationship.

Ignore fields based on parent ignore list
This commit is contained in:
Pavel Luhin 2016-07-26 13:05:34 +03:00 committed by Artur Konczak
parent c7dfd2131e
commit 2718be7c07

View File

@ -32,6 +32,7 @@ import org.springframework.core.GenericCollectionTypeResolver;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.data.annotation.Transient; import org.springframework.data.annotation.Transient;
import org.springframework.data.elasticsearch.annotations.*; import org.springframework.data.elasticsearch.annotations.*;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.core.completion.Completion; import org.springframework.data.elasticsearch.core.completion.Completion;
import org.springframework.data.elasticsearch.core.geo.GeoPoint; import org.springframework.data.elasticsearch.core.geo.GeoPoint;
import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.mapping.model.SimpleTypeHolder;
@ -45,6 +46,7 @@ import org.springframework.data.util.TypeInformation;
* @author Kevin Leturc * @author Kevin Leturc
* @author Alexander Volz * @author Alexander Volz
* @author Dennis Maaß * @author Dennis Maaß
* @author Pavel Luhin
*/ */
class MappingBuilder { class MappingBuilder {
@ -108,7 +110,7 @@ class MappingBuilder {
for (java.lang.reflect.Field field : fields) { for (java.lang.reflect.Field field : fields) {
if (field.isAnnotationPresent(Transient.class) || isInIgnoreFields(field)) { if (field.isAnnotationPresent(Transient.class) || isInIgnoreFields(field, fieldAnnotation)) {
continue; continue;
} }
@ -336,10 +338,9 @@ class MappingBuilder {
return idFieldName.equals(field.getName()); return idFieldName.equals(field.getName());
} }
private static boolean isInIgnoreFields(java.lang.reflect.Field field) { private static boolean isInIgnoreFields(java.lang.reflect.Field field, Field parentFieldAnnotation) {
Field fieldAnnotation = field.getAnnotation(Field.class); if (null != parentFieldAnnotation) {
if (null != fieldAnnotation) { String[] ignoreFields = parentFieldAnnotation.ignoreFields();
String[] ignoreFields = fieldAnnotation.ignoreFields();
return Arrays.asList(ignoreFields).contains(field.getName()); return Arrays.asList(ignoreFields).contains(field.getName());
} }
return false; return false;