JCache сквозная запись без ключа - PullRequest
0 голосов
/ 11 февраля 2019

Я кодировал это для создания кеша:

private Cache<String, Reference> getOrCreateCache(String name) {
    CacheManager cacheManager = Caching.getCachingProvider().getCacheManager();
    Cache<String, Reference> cache = cacheManager.getCache(name, String.class, Reference.class);

    if (cache == null) {
        CompleteConfiguration<String, Reference> config =
            new MutableConfiguration<String, Reference>()
                .setReadThrough(true)
                .setCacheLoaderFactory(this.referenceCacheLoaderFactory)
                .setWriteThrough(true)
                .setCacheWriterFactory(this.referenceCacheWriterFactory)
                .setTypes(String.class, Reference.class);

        cache = cacheManager.createCache(name, config);
    }

    return cache;
}

Как вы можете видеть, я включил стратегию write-through.

Итак, кэшированные сущности пишутся с использованиемCacheWriter реализация сначала они кэшируются.

В мой класс обслуживания у меня есть этот код:

public void create(ReferencePayload reference) {
    this.cache.putIfAbsent("<<<which-key>>>", reference);
}

ReferencePayload не имеет поля id.

@Data
@NoArgsConstructor
public class ReferencePayload {

    @NotEmpty
    private String transactionId;

    @NotEmpty
    private String codiDirCorp;

    // ...
}

Я имею в виду, когда нужно создать сущность, у нее нет идентификатора.Он должен быть сгенерирован, как правило, в базе данных.После сохранения в базе данных он возвращается.

Используя стратегию кэша write-trhough, как мне заполнить это поле id, чтобы использовать его в качестве key кэша.

...