Связанные узлы не извлекаются в Spring Data Neo4j 4.0.0

У меня странная проблема с автоматической выборкой узла в Spring Data Neo4j 4.0.0. У меня есть класс, как показано ниже:

@NodeEntity
public class FilterVersionChange extends UnitVersion {
    @GraphId
    private Long id;

    public FilterVersionChange() {
        super();
    }

    public FilterVersionChange(String description, Long creationDate)
    {
        super(description, creationDate);
    }

    @Relationship(type="CONTAINS", direction = Relationship.OUTGOING)
    private Set<FilterState> filterStates;

    @Relationship(type="REFERENCES", direction = Relationship.OUTGOING)
    private FilterVersionChange referencedFilterVersionChange;

    @Relationship(type="ADDED", direction = Relationship.OUTGOING)
    private Set<FilterState> newFilterStates;

    @Relationship(type="DELETED", direction = Relationship.OUTGOING)
    private Set<FilterState> deletedFilterStates;

    @Relationship(type="MODIFIED", direction = Relationship.OUTGOING)
    private Set<ModifiedUnitState> modifiedFilterStates;

    @Relationship(type="TRACKS", direction = Relationship.INCOMING)
    private FilterVersion filterVersion;

    @Relationship(type = "CREATED_ON", direction = Relationship.OUTGOING)
    private TimeTreeSecond timeTreeSecond;

    public void createdOn(TimeTreeSecond timeTreeSecond) {
        this.timeTreeSecond = timeTreeSecond;
    }

    public void contains(Set<FilterState> filterStates) {
        this.filterStates = filterStates;
    }

    public void references(FilterVersionChange referencedFilterVersionChange) {
        this.referencedFilterVersionChange = referencedFilterVersionChange;
    }

    public void added(Set<FilterState> newFilterStates) {
        this.newFilterStates = newFilterStates;
    }

    public void deleted(Set<FilterState> deletedFilterStates) {
        this.deletedFilterStates = deletedFilterStates;
    }

    public void modified(Set<ModifiedUnitState> modifiedFilterStates) {
        this.modifiedFilterStates = modifiedFilterStates;
    }

    public void trackedIn(FilterVersion filterVersion) {
        this.filterVersion = filterVersion;
    }

    public FilterVersion getFilterVersion() {
        return filterVersion;
    }

    public Set<FilterState> getFilterStates() {
        return filterStates;
    }
}

В базе данных у меня есть один узел FilterVersionChange с несколькими узлами FilterStates, прикрепленными к нему через отношения «СОДЕРЖИТ» и «ДОБАВЛЕНО». Предположим, что у меня есть идентификатор этого узла FilterVersionChange, и я хочу получить узел, вызвав findOne(id). Но то, что я получаю от этого, является нулевым значением для переменной filterStates.

Насколько я понимаю из документации, findOne по умолчанию должен получать глубину 1. Но я действительно понятия не имею, почему я получаю значение null с помощью переменной filterStates.

Заранее спасибо, и ваше предложение будет действительно оценено!

РЕДАКТИРОВАТЬ

Это функция, в которой находится код вставки.

public FilterVersionChange createNewFilterVersionChange(String projectName,
                                                        String filterVersionName,
                                                        String filterVersionChangeDescription,
                                                        Set<FilterState> filterStates)
{
    Long filterVersionNodeId = filterVersionRepository.findFilterVersionByName(projectName, filterVersionName);
    if(filterVersionNodeId != null)
    {
        FilterVersion newFilterVersion = filterVersionRepository.findOne(filterVersionNodeId, 2);
        HashMap<String, Filter> filterHashMap = new HashMap<String, Filter>();
        Iterable<Filter> filters = filterRepository.findAll();
        if(filters.iterator().hasNext())
        {
            for(Filter filter : filters)
            {
                filterHashMap.put(filter.getMatchingString(), filter);
            }
        }

        for(FilterState filterState : filterStates)
        {
            Filter filter;
            if(filterHashMap.isEmpty() == false)
            {
                 filter = filterHashMap.get(filterState.getMatchingString());
            }
            else
            {
                filter = new Filter(filterState.getMatchingString(), filterState.getMatchingType());
                filter.belongsTo(newFilterVersion.getProject());
            }
            filterState.stateOf(filter);
        }

        Date now = new Date();
        FilterVersionChange filterVersionChange = new FilterVersionChange();
        filterVersionChange.setDescription(filterVersionChangeDescription);
        filterVersionChange.setCreationDate(now.getTime());
        filterVersionChange.contains(filterStates);
        filterVersionChange.added(filterStates);
        filterVersionChange.trackedIn(newFilterVersion);
        TimeTreeSecond timeInstantNode = timeTreeService.getFilterTimeInstantNode(projectName, now.getTime());
        filterVersionChange.createdOn(timeInstantNode);
        FilterVersionChange addedFilterVersionChange = filterVersionChangeRepository.save(filterVersionChange);

        return addedFilterVersionChange;
    }
    else
    {
        return null;
    }
}

Вот класс FilterState

@NodeEntity
public class FilterState {

    @GraphId
    private Long id;

    private String matchingString;
    private String matchingType;

    public FilterState() {

    }

    public FilterState(String matchingString, String matchingType) {
        this.matchingString = matchingString;
        setMatchingType(matchingType);
    }

    @Relationship(type="STATE_OF", direction = Relationship.OUTGOING)
    private Filter filter;

    @Relationship(type="PART_OF", direction = Relationship.OUTGOING)
    private CodeUnit codeUnit;

    @Relationship(type="CONTAINS", direction = Relationship.INCOMING)
    private FilterVersionChange containedInFilterVersionChange;

    @Relationship(type="ADDED", direction = Relationship.INCOMING)
    private FilterVersionChange addedInFilterVersionChange;

    public void setMatchingString(String matchingString) {
        this.matchingString = matchingString;
    }

    public void setMatchingType(String matchingType) {
        String type = null;
        if(matchingType.equalsIgnoreCase("RegexFilter"))
        {
            type = "RegexFilter";
        }
        else if(matchingType.equalsIgnoreCase("ClassFilter"))
        {
            type = "ClassFilter";
        }
        this.matchingType = type;
    }

    public void stateOf(Filter filter) {
        this.filter = filter;
    }

    public void partOf(CodeUnit codeUnit) {
        this.codeUnit = codeUnit;
    }

    public String getMatchingString() {
        return matchingString;
    }

    public String getMatchingType() {
        return matchingType;
    }

    public Filter getFilter() {
        return filter;
    }

    public Long getId() {
        return id;
    }

    public void addedIn(FilterVersionChange addedInFilterVersionChange) {
        this.addedInFilterVersionChange = addedInFilterVersionChange;
    }

    public FilterVersionChange getContainedInFilterVersionChange() {
        return containedInFilterVersionChange;
    }
}

и вот файл градиента

def RMQVersion = "3.3.4"
def GSONVersion = "2.3.1"

def Neo4jVersion = "2.2.1"
def Neo4jTimeTreeVersion = "2.2.1.30.21"

def SpringVersion = "4.1.6.RELEASE"
def SDNVersion = "4.0.0.BUILD-SNAPSHOT"

def JunitVersion = "4.12"

apply plugin: 'java'
apply plugin: 'maven'

sourceCompatibility = 1.5
version = '1.0'

repositories {
    mavenCentral()
    maven {
        url("http://maven.springframework.org/milestone")
    }
    maven {
        url("http://repo.spring.io/libs-snapshot")
    }
}

dependencies {
    compile "org.springframework.data:spring-data-neo4j:${SDNVersion}"

    compile "org.neo4j:neo4j:${Neo4jVersion}"
    compile "com.graphaware.neo4j:timetree:${Neo4jTimeTreeVersion}"

    compile "com.rabbitmq:amqp-client:${RMQVersion}"
    compile "com.google.code.gson:gson:${GSONVersion}"

    testCompile group: 'org.springframework.data', name: 'spring-data-neo4j', version: SDNVersion, classifier: 'tests'
    testCompile group: 'org.springframework', name: 'spring-test', version: SpringVersion
    testCompile group: 'junit', name: 'junit', version: JunitVersion
}

person Peter Sie    schedule 20.05.2015    source источник
comment
Это просто отсутствует Содержит и Добавлено? Или он вообще никакие отношения не загружает? Вы используете встроенный снимок или 4.0.0.M1? Можете ли вы включить журнал отладки, включив ‹logger name=org.springframework.data.neo4j level=debug /› в logback.xml и посмотреть, есть ли что-нибудь важное?   -  person Luanne    schedule 21.05.2015
comment
В нем просто отсутствует содержание и добавление, а также другие отношения Set. Загружаются другие отношения, не относящиеся к набору. Я использую 4.0.0.BUILD-SNAPSHOT. У меня здесь нет файла с именем logback.xml. Я использую установочный пакет .zip neo4j.   -  person Peter Sie    schedule 21.05.2015
comment
И поскольку он не загружает эти связанные узлы, он всегда удаляется из базы данных, когда я его сохраняю. это довольно неприятно..   -  person Peter Sie    schedule 21.05.2015
comment
Правильно ли созданы данные на графике с правильными метками и т. д.? Вы можете просто добавить logback.xml в качестве ресурса в свой проект, который следует забрать. Мой выглядит так: ‹?xml version=1.0 encoding=UTF-8?› ‹configuration› ‹appender name=console class=ch.qos.logback.core.ConsoleAppender› ‹encoder› ‹pattern›%d %5p %40.40c: %4L - %m%n‹/pattern› ‹/encoder› ‹/appender› ‹logger name=org.springframework.data.neo4j level=debug /› ‹root level=info› ‹appender-ref ref=console /› ‹/корень› ‹/конфигурация›   -  person Luanne    schedule 21.05.2015
comment
Я пытаюсь воспроизвести проблему здесь, основываясь на классах, которые вы перечислили в этом и других потоках. Есть ли способ поделиться соответствующими частями этого приложения?   -  person Luanne    schedule 21.05.2015
comment
Данные имеют две метки: FilterVersionChange и UnitVersion. Данные вроде в порядке. Я отредактировал свой пост и добавил функцию, в которой я делаю вставку. Тем временем я попытаюсь активировать ведение журнала.   -  person Peter Sie    schedule 21.05.2015
comment
Спасибо, у меня достаточно работы над этим. Сообщу вам, как только у меня будет что-то полезное   -  person Luanne    schedule 21.05.2015
comment
@Luanne Я нашел этот журнал 21 мая 2015 г. 15:14:51,068 ПРЕДУПРЕЖДЕНИЕ entityaccess.DefaultEntityAccessStrategy: 354 - Невозможно сопоставить итерируемый объект класса org.model.FilterState с экземпляром org.model.FilterVersionChange. Найдено более одного потенциально совпадающего поля. Что это означает? Почему нельзя нанести на карту?   -  person Peter Sie    schedule 21.05.2015
comment
Давайте продолжим обсуждение в чате.   -  person Luanne    schedule 21.05.2015
comment
пожалуйста, смотрите обновленное обсуждение, исправление уже доступно.   -  person Luanne    schedule 21.05.2015
comment
Да, теперь это работает. Большое спасибо вам и вашей команде! :D   -  person Peter Sie    schedule 21.05.2015
comment
Добро пожаловать, я добавил правильный ответ сейчас, чтобы помочь всем, кто может с ним столкнуться. Не могли бы вы подтвердить там, что исправление работает для вас? Огромное спасибо   -  person Luanne    schedule 22.05.2015


Ответы (1)


Эта проблема была исправлена ​​после версии 4.0.0M1, пожалуйста, используйте последний снимок сборки, спасибо.

person Luanne    schedule 22.05.2015