Сохранение списка подклассов или массивов в объекте отношений в Neo4J Spring Boot OGM - PullRequest
0 голосов
/ 01 октября 2018

У меня есть вопрос о том, как сохранить подкласс или ArrayList внутри сущности отношения?

Моя проблема: Когда я передаю данные в вызов сохранения из хранилища, чтобы сохранить дочерний элемент как часть родительского объекта, естьнет проблем или ошибок, но при получении или поиске в базе данных данные отсутствуют.

Родительский класс:

@RelationshipEntity(type = "HAS_DATA")
public class Parent{

private Long id;

private Long sequenceId;

Set<Child> = new HashSet<>();

@StartNode
SomeClass1 someClass1;

@EndNode
SomeClass2 someClass2;

//Getter and Setters
}

Дочерний класс:

public class Child{

Long Id;

String name;

//Getters and Setters
}

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Согласно предложению @Jasper Blues, я создал свой собственный конвертер в Java.Отвечая на мой собственный вопрос, так как я не мог добавить это в комментариях.

public class ChildConverter implements AttributeConverter<Set<Child>, String> {

ObjectMapper mapper = new ObjectMapper();

@Override
public String toGraphProperty(Set<Child> data) {
    String value = "";
    try {
        value = mapper.writeValueAsString(data);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    return value;
}

@Override
public Set<Child> toEntityAttribute(String data) {
    Set<Child> mapValue = new HashSet<Child>();
    TypeReference<Set<Child>> typeRef = new TypeReference<Set<Child>>() {
    };
    try {
        mapValue = mapper.readValue(data, typeRef);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return mapValue;
}

}

Обязательно добавьте аннотацию @Convert в родительский класс.

 @Convert(converter = ChildConverter.class)
 Set<Child> = new HashSet<>();
0 голосов
/ 01 октября 2018

Посмотрите на аннотацию AttributeConverter , однако, если вам нужен набор значений в отношении, рассмотрите возможность рефакторинга вашей модели, чтобы сделать ее узлом со связанными вещами.

Пример:

Вот пример конвертера атрибутов (в Kotlin), который преобразует в / из свойства массива строк в Neo4j тип Java.

class RoleArrayAttributeConverter : AttributeConverter<Array<Role>, Array<String>>
{

    override fun toEntityAttribute(value: Array<String>): Array<Role>
    {
        return value.map { Role.valueOf(it) }.toTypedArray()
    }

    override fun toGraphProperty(value: Array<Role>): Array<String>
    {
        return value.map { it.toString() }.toTypedArray()
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...