Генерация идентификатора класса сущностей Spring Gemfire

Можно ли использовать автоматически сгенерированный идентификатор в Spring Data Gemfire? например, если у меня есть класс MyGemfire

@region("myregion")
class MyGemfire{

    @Id
    @generatedValue????// if it is not possible what method I have to use to generate id in auto increment fashion?
    Long id;
    String name;
    ...
}

person Ezd    schedule 26.04.2017    source источник


Ответы (1)


Из беглого взгляда на SimpleGemfireRepository не похоже, что репозиторий генерирует идентификатор:

@Override
public <U extends T> U save(U entity) {
    ID id = entityInformation.getId(entity).orElseThrow(
        () -> newIllegalArgumentException("ID for entity [%s] is required", entity));

    template.put(id, entity);

    return entity;
}

Кроме того, этот вопрос и его ответ предполагают, что существует нет генерации идентификатора в самом Gemfire.

Итак, что вам нужно сделать, это создать свой идентификатор самостоятельно. Например, должно быть возможно иметь два конструктора, один из которых принимает идентификатор, а другой не принимает идентификатор, а генерирует его. UUID будет очевидным выбором. Если вы привязаны к Long значениям, вам, вероятно, придется использовать собственный алгоритм.

Чтобы для Spring Data было очевидно, какой конструктор использовать при загрузке экземпляров, вы можете использовать аннотацию @PersistenceConstructor.

person Jens Schauder    schedule 27.04.2017
comment
Спасибо. Я использовал генератор UUID. - person Ezd; 30.04.2017