Отключить спящий режим HiLo Sequence
Я работаю с Hibernate 4.2.x и хочу отключить генерацию последовательности HiLo - каждый раз заходить в БД (оракул). Я добавил эту строку в файл persistance.xml:
<property name="hibernate.id.new_generator_mappings" value="true"/>
И моя сущность выглядит так:
@Entity
@Table(name = "MY_TABLE")
@SequenceGenerator(name = "generator", sequenceName = "MY_SEQ", initialValue = 1, allocationSize = 1)
public class MyEntity {
private long id;
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator")
public Long getId()
{
return id;
}
}
По какой-то причине я все еще получаю поведение HiLo - идентификаторы создаются далеко друг от друга.
Посмотрел некоторые вопросы ( здесь и здесь, например), но не нашел ничего полезного. Более того, я не мог найти, где настроить, какой оптимизатор использовать.
1 ответ
Будучи не слишком знакомым с hibernate, я предполагаю, что он использует последовательность базы данных Oracle в качестве источника. Одной из особенностей последовательностей Oracle является кеш последовательностей. проверьте в определении последовательности, установлен ли размер кэша (по умолчанию = 20). Я знаю, что после перезапуска базы данных кэш все равно очищается, поэтому вы теряете последовательные числа. Измените последовательность с помощью команды: измените последовательность MY_SEQ nocache;
Помните, что производительность OLAP может ухудшиться, если последовательности не кэшируются.