Я столкнулся с проблемой сгенерированного идентификатора гибернации. Я использую Sequence Generator для генерации своего идентификатора. База данных — Oracle 11g и версия гибернации 3.6.1.
Я знаю, что значение по умолчанию в спящем режиме в спящем режиме равно 50, и, следовательно, спящий режим делает вызовы базы данных каждые 50 вставок для получения идентификатора. Следовательно, я изменяю selectionSize на 1000, чтобы уменьшить количество обращений к базе данных, как показано ниже:
@GeneratedValue(generator = "test_gen", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "test_gen", sequenceName = "myschema.my_oracle_sequence", allocationSize = 1000)
Однако есть несколько проблем.
Во-первых, это улучшение, поэтому я не могу обновить спящую версию, чтобы использовать новые генераторы последовательностей.
Во-вторых, я не могу использовать указанное ниже свойство, так как это повлияет на другие объекты спящего режима, которые не должны быть затронуты моим изменением. Есть ли способ указать спящему режиму применить указанное ниже свойство только к одному объекту?
hibernate.id.new_generator_mappings=true
В-третьих, я попробовал приведенное ниже сопоставление для спящего режима. Однако здесь я должен указать начальное значение. Если нет, он принимает начальное значение как 1 и вычисляет идентификатор, и я получаю, как и ожидалось, исключение ограничения, поскольку идентификатор уже использовался. Я не могу указать начальное значение здесь снова, так как код уже используется, и как первичный идентификатор, так и nextval последовательности были перемещены из своих начальных значений.
@GenericGenerator(
name = "sequenceGenerator",
strategy = "enhanced-sequence",
parameters = {
@org.hibernate.annotations.Parameter(
name = "optimizer",
value = "pooled"
),
@org.hibernate.annotations.Parameter(
name = "increment_size",
value = "500"
)
}
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "sequenceGenerator"
)
В-четвертых, я не могу использовать код, который я упомянул в первом блоке кода, так как я случайно вижу UniqueConstraintViolationException при вставке записей, как это видели несколько других людей. JPA 2 @SequenceGenerator @GeneratedValue, создающий нарушение уникального ограничения
Могу ли я со всеми этими ограничениями увеличить размер распределения, чтобы повысить производительность вставки записей. Я бы вставил около 10-40 миллионов записей за один раз.
С уважением, В