Отключить спящий режим 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 может ухудшиться, если последовательности не кэшируются.

Другие вопросы по тегам