【发布时间】:2022-01-19 10:09:29
【问题描述】:
我正在从 Postgres DB 读取数据,然后我需要从红色数据中删除一部分 JSON 数据。但这会对数据库级别产生影响,因为这甚至会从数据库级别删除数据。
删除方法
private static Map<String,Object> removePrivate(Object key) {
try {
Map<String, Object> keyMap = (Map<String, Object>) key;
keyMap.remove("d");
return keyMap;
} catch (Exception ex) {
log.warn("no private component 'd' in private key",ex);
return null;
}
}
这里使用remove方法。
public List<Key> getKeys(URI controller, URI url, String type, String purpose, String reference, Long limit, boolean exportPrivate) {
List<Key> keyList = new ArrayList<>();
List<com.xxx.model.Key> keys = keyRepository.getKeys(controller, url, type, purpose, reference, limit);
if (keys == null || keys.isEmpty()) throw new BadRequestException("No keys found for given settings");
keys.forEach(key -> {
try {
Key k = modelMapper.map(key, Key.class);
keyList.add(k);
} catch (Exception e) {
log.error("Parse exception {}", e.getMessage(),e);
throw new BadRequestException("Invalid key format",e);
}
});
if (!exportPrivate) keyList.forEach(key -> key.setKey(removePrivate(key.getKey())));
return keyList;
}
是否有任何明确的原因为什么从地图中删除属性“d”会对数据库级别产生影响,并且它也会从“keys”列表中删除“d”组件,但它应该只从“keyList”列表中删除.
【问题讨论】:
-
你在使用像 Hibernate 这样的框架吗?保存数据?
-
@Bruno 是的,我正在使用 Spring Data JPA
-
不清楚您的
modelMapper做了什么,但它可能会保留对Map的引用,然后您稍后会保存它,影响存储在数据库中的数据。 -
附带说明,您对类名和变量名的选择令人困惑。首先,你有一个
key.getKey(),所以一个“key”显然也包含一个名为“key”的字段,它似乎是Map<String, Object>类型,然后与Maps的一般术语冲突(其中key/值有自己的含义)。从本质上讲,在这个简短的代码示例中,“key”这个词似乎意味着至少 3 种不同的东西...... -
如果您稍后要保留该实体,您所要做的就是复制列表并在
getKeys中修改它,而不是在原始列表上操作。
标签: java spring postgresql spring-boot linkedhashmap