Почему кластер OpenJPA автоматически генерирует идентификаторы?

1

Я использую 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).

К сожалению, я не нашел никакой документации о том, как и почему. Может ли кто-нибудь указать мне в правильном направлении?

благодаря

Теги:
jpa
openjpa

1 ответ

1
Лучший ответ

Когда вы используете аннотацию @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 возвращается к БД для получения ключей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню