У меня есть следующие отношения
Диаграмма -has-многие- Соединение
Connection -has-many MoveablePoints
Я использую интерфейс хранилища neo4j omg v3.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);