2015-12-15 2 views
4

Я пытаюсь обновить данные Spring Neo4J с 3 по 4 - я использую Neo4J 2.2.2.Весенние данные Neo4J 4 - нет template.fetch()

Я использую экземпляр GraphRepository для запроса базы данных, возврата объекта обратно.

Этот объект имеет несколько связей, которые не выбраны (преднамеренно, чтобы избежать чтения на всем графике).

В коде SDN3 просто используется класс Neo4JTemplate для выполнения вызова выборки для каждой связи, которую мне нужно было получить. Это работало очень хорошо.

Однако в SDN4 это средство было удалено и заменено различными реализациями метода load(). Из документации не ясно, как добиться того, что я сделал в SDN3.

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

Я пропустил что-то важное в процессе обновления, или есть простой способ сделать то, что я пытаюсь сделать?

Добавление кода:

Мой объект класса:

@NodeEntity 
public class File implements MetroNode { 

    private Long id; 

    private String fileName; 

    private SourceState sourceState; 

    private Set<State> states; 

    @GraphId 
    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getFileName() { 
     return fileName; 
    } 

    public void setFileName(String fileName) { 
     this.fileName = fileName; 
    } 

    @Relationship(type = "HAS_FILE", direction = Relationship.INCOMING) 
    public SourceState getSourceState() { 
     return sourceState; 
    } 

    public void setSourceState(SourceState sourceState) { 
     this.sourceState = sourceState; 
    } 

    public State addState(MetroNode otherNode, StateStatus status) { 
     if (this.states == null) { 
      this.states = new HashSet<State>(); 
     } 
     State state = new State(this, otherNode, status.toString()); 
     this.states.add(state); 
     return state; 
    } 

    @Relationship(type = "HAS_STATE", direction = Relationship.OUTGOING) 
    public Set<State> getStates() { 
     return states; 
    } 

    public State getActiveState() { 
     if (this.states != null) { 
      for (State state : this.states) { 
       if (state.isActive()) { 
        return state; 
       } 
      } 
     } 
     return null; 
    } 

} 

Мой репозиторий Класс:

public interface FileRepository extends GraphRepository<File> { 

    File findByFileName(String fileName);  
} 

При выполнении метода getActiveState() я получаю нулевой возврат, поскольку состояния Set пусто (не выбрано).

Глядя на мой код, интересно, не потому ли, что я не использую «родной» метод загрузки из репозитория, а перегруженную версию?

ответ

0

SDN 4 позволяет контролировать загрузку связанных объектов с помощью persistence horizon.

Загрузка объекта с глубиной 0 будет отображать свойства объекта и не связанных объектов. Глубина 1 будет отображать первый уровень связанных объектов, но не их отношения и так далее.

Управление глубиной по типу отношений не поддерживается.

+0

Спасибо за ваш быстрый ответ. Я прочитал документ, к которому вы ссылаетесь, и содержит это предложение. «По умолчанию загрузка экземпляра будет отображать простые свойства этого объекта и связанные с ним объекты (т. Е. Depth = 1)». Это, похоже, не так в моем app, где набор объектов, заданных отношением, не заполняется. Я не понял здесь ситуацию? – TrueDub

+0

Это звучит не так. Глубина по умолчанию 1 должна загружать связанные объекты. Можете ли вы обновить свой вопрос с помощью какого-либо кода или теста и любых строк, представляющих интерес в журнале отладки? – Luanne

+0

Код добавлен - вся помощь приветствуется, спасибо. – TrueDub

Смежные вопросы