Я кодировал это для создания кеша:
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
кэша.