Мы используем выпуск spring-data-neo4j 2.2.2.Release и Neo4j 1.9.
Сохранение и обновление узлов (свойств) отлично работает с использованием GraphRepository.
Наш самый простой пример выглядит так:
public interface LastReadMediaRepository extends GraphRepository<Neo4jLastReadMedia> {}
Мы также устанавливаем некоторые отношения, связанные с узлом, класс узла выглядит так
@NodeEntity
public class Neo4jLastReadMedia {
@GraphId
Long id;
@JsonIgnore
@Fetch @RelatedToVia(type = "read", direction = Direction.OUTGOING)
Set<LastReadMediaToLicense> licenseReferences;
public Neo4jLastReadMedia() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public void read(final Neo4jLicense license, final Long lastAccess, final float progress, final Long chapterId) {
licenseReferences.add(new LastReadMediaToLicense(this, license, lastAccess, progress, chapterId));
}
public Set<LastReadMediaToLicense> getLicenseReferences() {
return licenseReferences;
}
@Override
public String toString() {
return "Neo4jLastReadMedia [id=" + id + "]";
}
}
Теперь мы сохраняем узел, используя метод save() репозитория. Отношения также сохраняются, по крайней мере, при первом сохранении.
Позже, когда мы хотим изменить свойства отношения (обновить отношение), которое уже существует (например, lastAccess), мы извлекаем узел из базы данных, манипулируем его набором отношений, здесь Set<LastReadMediaToLicense> licenseReferences;, а затем пытаемся сохранить узел обратно с save()
К сожалению, отношения не обновляются, и все свойства остаются прежними...
Мы знаем, как это сделать с помощью аннотированных шифровальных запросов в репозитории, но должен же быть «абстрактный» способ?!
Большое спасибо!
С уважением
РЕДАКТИРОВАНИЕ: если я удаляю связь из набора, а затем выполняю save() на узле, связь удаляется. Только обновление не работает! Или это намерение?