Redisson создает дополнительный ключ для хранения java POJO - PullRequest
0 голосов
/ 20 января 2020

Я использую Redisson (3.11.4) с пружинной загрузкой (2.1.5) для хранения java объектов.

Мой POJO выглядит следующим образом.

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@REntity
public class ParentRecord {

    @RId
    private String id;

    private String type;

    private String root;

    private Map<String, String> children;
}

И затем я go включаю, чтобы сохранить свои данные, используя merge.

liveObjectService.merge(parentRecord);
messageKeyCache.put(parentRecord.getId(), parentRecord.getId(), 60, TimeUnit.SECONDS);

. После объединения я вижу два ключа, один из которых - фактические данные. redisson_live_object:{223334343322}:com.memorystore.schema.ParentRecord:id:java.lang.String, а другой - redisson_live_object_field:{223334343322}:com.memorystore.schema.ParentRecord:children:org.redisson.RedissonMap

Я могу удалить первый ключ, выполнив liveObjectService.delete(ParentRecord.class, someId);, но второй ключ не удаляется. Разве он не должен быть удален при удалении первого ключа? Если нет, то как мне его удалить?

1 Ответ

0 голосов
/ 22 января 2020

1) Добавить аннотацию @RCascade:

@RCascade(RCascadeType.ALL)
private Map<String, String> children;

2) Удалить объект:

public void deleteByKey(K key) {
    T object = findByKey(key);
    liveObjectService.delete(object);
}

private T findByKey(K key) {
    return liveObjectService.get(type, key);
}

где тип - некоторый класс (ParentRecord.class).

...