Я использую OpenJPA 2.1.0 для моей логики сохранения с аннотациями. Первичный ключ в моих объектах аннотируется следующим образом:
@Id
@GeneratedValue
@Column(name = CONVERSATION_ID)
private long id;
Я понял, что созданные идентификаторы каким-то образом сгруппированы, например, 1,2,3,11,12,13,21,22,23 и т.д.
Я узнал из документации OpenJPA, что по умолчанию применяется GeneratorStrategy.AUTO
и что конкретная стратегия генерации зависит от поставщика JPA (http://openjpa.apache.org/builds/2.1.0/apache-openjpa-2.1. 0/docs/manual/main.html).
К сожалению, я не нашел никакой документации о том, как и почему. Может ли кто-нибудь указать мне в правильном направлении?
благодаря
Когда вы используете аннотацию @GeneratedValue
без стратегии OpenJPA по умолчанию для AUTO и большинства баз данных OpenJPA поддерживает использование генерации таблиц. По умолчанию allocSize равно 50, поэтому я ожидаю, что ваши ключи будут выглядеть примерно как 1,2,3,4,5,51,52,53,54,101 и т.д. Это связано с тем, что каждый раз, когда вы перезапускаете EntityManagerFactory (или приложение) OpenJPA должен вернуться в базу данных, чтобы получить еще одну партию ключей.
Я не уверен, почему вы видите распределение 10, но я вполне уверен, что объясняет, что вы видите. Если вы хотите включить sql trace (openjpa.Log=SQL=trace
), вы увидите, что OpenJPA возвращается к БД для получения ключей.