Ответ 1
По умолчанию объекты, аннотированные с помощью @SequenceGenerator
, используют initialValue = 1 и alocationSize = 50.
public @interface SequenceGenerator {
/**
* (Optional) The value from which the sequence object
* is to start generating.
*/
int initialValue() default 1;
/**
* (Optional) The amount to increment by when allocating
* sequence numbers from the sequence.
*/
int allocationSize() default 50;
}
"Последовательный" идентификатор объекта, по-видимому, вычисляется EclipseLink со следующей формулой:
entityId = initialValue - allocationSize + INCREMENT_BY
или в случае использования DDL:
entityId = START_WITH - allocationSize + INCREMENT_BY
Возвращаясь к вашим конкретным случаям:
@SequenceGenerator(
name="email-seq-gen",
sequenceName="EMAIL_SEQ_GEN",
allocationSize=500
) // initialValue=1 (default)
CREATE SEQUENCE EMAIL_SEQ_GEN START WITH 1 INCREMENT BY 500;
производит
entityId = 1 - 500 + 1 = -500 // EclipseLink error
@SequenceGenerator(
name="email-seq-gen",
sequenceName="EMAIL_SEQ_GEN",
initialValue=1,
allocationSize=500 )
CREATE SEQUENCE EMAIL_SEQ_GEN START WITH 1 INCREMENT BY 500;
производит
entityId = 1 - 500 + 1 = -500 // EclipseLink error
@SequenceGenerator(
name="email-seq-gen",
sequenceName="EMAIL_SEQ_GEN",
initialValue=500,
allocationSize=500
)
CREATE SEQUENCE EMAIL_SEQ_GEN START WITH 500 INCREMENT BY 500;
производит
entityId = 500 - 500 + 500 = 500 // fine, but inappropriate
entityId = 500 - 500 + 1000 = 1000 // incremented by 500
entityId = 500 - 500 + 1500 = 1500 // incremented by 500
...
Для удовлетворения ваших требований необходимо использовать следующее:
@SequenceGenerator(
name="email-seq-gen",
sequenceName="EMAIL_SEQ_GEN",
allocationSize=500
) // initialValue=1 (default) but 'START WITH'=500
CREATE SEQUENCE EMAIL_SEQ_GEN START WITH 500 INCREMENT BY 1;
производит
entityId = 500 - 500 + 1 = 1
entityId = 500 - 500 + 2 = 2
entityId = 500 - 500 + 3 = 3
...
Существующая последовательность может быть удалена из базовой базы данных следующей командой :
DROP SEQUENCE email_seq_gen RESTRICT;
Надеюсь, это поможет.