Estoy usando hibernate 3, oráculo 10g. Tengo una mesa: sujeto. La definición está aquísecuencia de oráculo de hibernación produce una gran brecha
CREATE TABLE SUBJECT
(
SUBJECT_ID NUMBER (10),
FNAME VARCHAR2(30) not null,
LNAME VARCHAR2(30) not null,
EMAILADR VARCHAR2 (40),
BIRTHDT DATE not null,
constraint pk_sub primary key(subject_id) USING INDEX TABLESPACE data_index
)
;
cuando se inserte un nuevo sujeto, sub_seq se utiliza para crear un identificador de objeto, la definición es aquí
create sequence sub_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 100
NOCYCLE ;
la clase sujeto es así:
@Entity
@Table(name="ktbs.syn_subject")
public class Subject {
@Id
@Column(name="subject_id")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SUB_SEQ")
@SequenceGenerator(name="SUB_SEQ", sequenceName = "SUB_SEQ")
private long subjectId;
private String fname;
private String lname;
private String emailadr;
private Date birthdt;
}
en la tabla de materias, ha habido 4555 sujetos en la base de datos cargados por las secuencias de comandos plsql de excel y la sub_secuencia funcionó bien. los números de sujeto van desde 1-4555. Sin embargo
, cuando he añadido un tema de mi solicitud para el uso de hibernación, el número de secuencia saltó a 255050. Después de varios días seguidos, los identificadores de sujetos generados por la mirada de hibernación como esto
270079
270078
270077
270076
270075
270074
270073
270072
270071
270070
270069
270068
270067
270066
270065
270064
270063
270062
270061
270060
270059
270058
270057
270056
270055
270054
270053
270052
270051
270050
265057
265056
265055
265054
265053
265052
265051
265050
260059
260058
260057
260056
260055
260054
260053
260052
260051
260050
255067
255066
255065
255064
255063
255062
255061
255060
255059
255058
255057
255056
255055
255054
255053
255052
255051
255050
4555
4554
4553
.
.
.
.
1
Hay varios grandes huecos: 4555 a 255051, 255067 a 260051, 265057 a 270051
esto es un desperdicio y no es un comportamiento deseado.
¿alguien sabe por qué sucede esto y caliente para fijarlo
Gracias
gracias. sí, ese puede ser el problema. así que hibernate aquí en mi caso ¿no usa la dosis el objeto de secuencia definido por Oracle? ¿Cómo arreglar este problema? – sse
también obtienes huecos de reinicios si recuerdo cuando la configuración es correcta, ya que la secuencia en la base de datos es 1, 2, 3, 4, y si el tamaño de asignación es 500, luego cuando se vuelve a colocar, 500 * 1 = 500 y cuando finalmente llega a 999, llama a obtener la secuencia siguiente recuperando 2 (o 3 si otro proceso obtuvo 2 ya), y luego 500 * 2 = 1000 hasta 1499. El servidor se reinicia después de usar solo 1 o 2 valores en el 500 un hueco. –
oh, y cuando llamas persiste y no enjuagas (si está en modo manual) usa los identificadores de la secuencia que nunca se guardan en la base de datos (hay muchos motivos, como acabo de notar, no estás usando allocationSize que utilizamos ALOT para evitar la interacción de db constante en operaciones de inserción, ya que es más trabajo de ida y vuelta) –