сохранение переменной глубины и отношений набора типов

#neo4j #persistence #relationship #neo4j-ogm

#neo4j #постоянство #взаимосвязь #neo4j-ogm

Вопрос:

У меня есть следующие отношения

Диаграмма -имеет-много- соединений, Соединение -имеет-много перемещаемых точек

Я использую интерфейс репозитория neo4j omg версии 3.1.3 neo4j для сохранения добавления и удаления соединений и подвижных точек. Мои модульные тесты работают нормально, однако, если я использую его в веб-среде, удаление соединений не применяется.

Я использую постоянство переменной глубины, равное 5. Я чувствую, что это как-то связано с сеансом omg, но я не уверен. Любые идеи приветствуются.

сервисный код

 @Transactional
    @Override
    @Retryable(value = TransientException.class,exceptionExpression="#{message.contains('RWLock')}", maxAttempts = 5)
    public Diagram update(Diagram diagram) throws GUMLException {

//        for (Connection connection : diagram.getConnections())
//            if (connection.getId() != null)
//                connectionService.deleteMoveablePoints(connection.getId());
//
//        for (DiagramElement de : diagram.getDiagramElements()) {
//            diagramElementService.save(de);
//        }


        return umlDiagramRepository.save(diagram, 5);

    }
  

классы домена

 @NodeEntity
public class Diagram {
   public Set<Connection> getConnections() {
        if (connections == null)
            connections = new HashSet<Connection>();
        return connections;
    }

    public void setConnections(Set<Connection> connections) {
        this.connections = connections;
    }

    @org.neo4j.ogm.annotation.Relationship(type = "HasConnections", direction = org.neo4j.ogm.annotation.Relationship.OUTGOING)
    Set<Connection> connections;

}

@NodeEntity
public class Connection implements IConnector {
  public Set<MoveablePoint> getMoveablePoints() {
        return moveablePoints;
    }

    public void setMoveablePoints(Set<MoveablePoint> moveablePoints) {
        this.moveablePoints = moveablePoints;
    }


    @org.neo4j.ogm.annotation.Relationship(type = "HasMoveablePoints", direction = org.neo4j.ogm.annotation.Relationship.OUTGOING)
    private Set<MoveablePoint> moveablePoints;

}

  

Когда я изменяю свой сервисный код, чтобы сначала извлечь объект из сеанса, а затем перезаписать, это, кажется, работает. Однако мне это не кажется правильным.

 Diagram d2 = umlDiagramRepository.findById(diagram.getId()).get();
        d2 = diagram;

        return umlDiagramRepository.save(d2, 5);
  

Комментарии:

1. Можете ли вы увидеть, какие правильные инструкции генерируются из выходных данных журнала (уровень отладки)?

2. Спасибо за ответ, мейстермайер. Да, я вижу правильный оператор cypher, который должен сохраняться. Я также добавил прослушиватель событий и инструкции log для предварительной распечатки сохраняемого объекта после сохранения, и это также отражает то, что должно происходить. Все еще не работает..