我正在使用java的redisson库来维护用于存储嵌套对象的RLO (redisson live objects)。我使用delete从redis中删除了那些嵌套的对象,但从redis-cli中,我看到该对象实际上被部分删除了。我遗漏了什么?
发布于 2021-03-01 11:50:25
我也遇到过不完全删除的问题,但我相信这是因为有两种不同的delete
方法,它们的行为不同。
/**
* Deletes attached object including all nested objects.
*
* @param <T> Entity type
* @param attachedObject - proxied object
*/
<T> void delete(T attachedObject);
/**
* Deletes object by class and ids including all nested objects.
*
* @param <T> Entity type
* @param entityClass - object class
* @param ids - object ids
*
* @return amount of deleted objects
*/
<T> long delete(Class<T> entityClass, Object... ids);
虽然两者都表示将删除所有嵌套对象,但其中只有一个会执行此操作。实际上,第一个方法将调用私有方法
private <T> void delete(T attachedObject, Set<String> deleted)
它将执行嵌套对象的删除,如快速检查后所见:
for (Entry<String, Object> obj : getMap(attachedObject).entrySet())
我不知道这是不是个bug。
暂时只使用另一种方法。如果您有实体ID,那么只需在返回的活动对象上运行一个get
,然后运行一个delete
就很容易了。
https://stackoverflow.com/questions/65182780
复制相似问题