Отключить генерацию гибернации HiLo Sequence

Я работаю с Hibernate 4.2.x и хочу отключить генерацию последовательности HiLo - каждый раз заходить в БД (оракул). Я добавил эту строку в файл persistence.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 - идентификаторы, созданные далеко друг от друга.

Посмотрел несколько вопросов (здесь и здесь, например), но не нашел ничего полезного. Более того, я не мог найти, где настроить, какой Оптимизатор для использования.


person TheTufik    schedule 27.01.2015    source источник
comment
Я предлагаю использовать такой инструмент, как PL/SQL Developer, чтобы проверить последовательность MY_SEQ, чтобы определить, как она настроена в базе данных.   -  person Bob Jarvis - Reinstate Monica    schedule 27.01.2015


Ответы (1)


Не слишком хорошо знакомый с спящим режимом, я предполагаю, что он использует последовательность базы данных Oracle в качестве источника. Одной из особенностей последовательностей Oracle является кэш последовательностей. проверьте в определении последовательности, установлен ли размер кэша (по умолчанию = 20). Я знаю, что после перезапуска базы данных кеш все равно очищается, поэтому вы теряете последовательные номера. Измените последовательность командой: alter sequence MY_SEQ nocache;

Имейте в виду, что производительность OLAP может ухудшиться, если последовательности не кэшируются.

person Non Plus Ultra    schedule 27.01.2015
comment
Это верно, особенно если у вас есть кластер. Каждый узел имеет свой собственный кеш и, следовательно, разные диапазоны, и вы можете получить последовательность из каждого кластера, что приводит к поведению, подобному HiLo. - person TheTufik; 17.10.2015