У меня есть следующая сущность:
@NodeEntity
public class Value {
@Properties(prefix = "property", allowCast = true)
private Map<String, Object> properties;
}
Я добавил следующие свойства:
Map<String, Object> properties1 = new HashMap<>();
properties.put("key1", "one");
properties.put("key2", "two");
value.setProperties(properties1);
Прямо сейчас на уровне базы данных у меня есть узел Value
с двумя свойствами:
property.key1 = "one"
property.key2 = "two"
Теперь я хотел бы обновить свойства этого узла Value
. Для этого я создал другие свойства:
Map<String, Object> properties2 = new HashMap<>();
properties.put("key1", "three");
После обновления узла на уровне базы данных у меня есть следующие свойства:
property.key1 = "three"
property.key2 = "two"
Как вы можете видеть, следующий подход корректно обновил свойство с key1
, но не удаляет свойство с key2
.
Как правильно обновить динамические свойства, чтобы удалить все свойства с ключами, отсутствующими в новой properties2
HashMap?
ОБНОВЛЕНО
Как предлагается в ответе ниже, я использую следующий код для повторного использования тех же свойств из узла Value:
Map<String, Object> oldProperties = value.getProperties();
Map<String, Object> newProperties = extractProperties(properties);
mergeMaps(newProperties, oldProperties);
protected void mergeMaps(Map<String, Object> sourceMap, Map<String, Object> destinationMap) {
Iterator<Map.Entry<String, Object>> iterator = destinationMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Object> entry = iterator.next();
String key = entry.getKey();
Object value = sourceMap.get(key);
if (value == null) {
iterator.remove();
} else {
entry.setValue(value);
}
}
}
но он по-прежнему не работает с тем же результатом, что и раньше - он по-прежнему не удаляет свойства из узла Neo4j с помощью удаленных ключей. Что я делаю не так?