использование последовательностей оракула с jpa (toplink) - PullRequest
0 голосов
/ 24 сентября 2011

В моем оракуле есть объект последовательности:

create sequence BASE_SEQ
minvalue 1
maxvalue 9999999999999999999999999999
start with 100
increment by 1
nocache;

Я использую jpa (toplink) для своего веб-приложения. У меня есть базовый класс для всех моих объектов БД:

@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

public class AbstractEntity implements Serializable {
    protected BigDecimal id;

    @javax.persistence.Column(name = "ID")
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BASE_SEQ")
    @SequenceGenerator(name="BASE_SEQ",sequenceName="BASE_SEQ", catalog = "DOF")
    public BigDecimal getId() {
        return id;
    }

Этот класс наследуется некоторыми объектами. После того, как я запускаю свое приложение и сохраняю / объединяю несколько сущностей в db, я могу обнаружить, что их PK начинается с 51 (вместо ожидаемых 100).

После этого я иду в свою базу данных, просматриваю DDL моего объекта последовательности и вижу, что он был изменен на:

create sequence BASE_SEQ
minvalue 1
maxvalue 9999999999999999999999999999
start with 101
increment by 1
nocache;

Почему так происходит? У меня есть несколько сущностей с PK 51, 52 ... и т. Д., А последовательность начинается с 101.

AS - GlassFish 3.1.1

1 Ответ

1 голос
/ 26 сентября 2011

Значение preallocationSize по умолчанию для SequenceGenerator равно 50, оно должно соответствовать приращению вашей последовательности, которое вы установили равным 1.

Либо измените приращение на 50 (рекомендуется), либо измените preallocationSize на 1 (этоприводит к плохой производительности вставки).

...