私は hibernate 3 、oracle 10g を使用しています。私はテーブルを持っています:件名。定義はこちら
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
)
;
新しいサブジェクトを挿入するとき、サブジェクト ID を作成するために sub_seq が使用されます。定義はここにあります
create sequence sub_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 100
NOCYCLE ;
Subject クラスは次のようになります。
@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;
}
subject テーブルには、Excel から plsql スクリプトによってロードされたデータベースに 4555 件のサブジェクトがあり、sub_sequence は正常に機能しました。サブジェクト ID の範囲は 1 ~ 4555 です。
ただし、休止状態を使用してアプリケーションからサブジェクトを追加すると、シーケンス番号が 255050 に跳ね上がりました。数日間実行した後、休止状態によって生成されたサブジェクト ID は次のようになります。
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
いくつかの大きなギャップがあります: 4555 から 255051、255067 から 260051、265057 から 270051
これは無駄であり、望ましい動作ではありません。
なぜこれが起こり、それを修正するのが難しいのか誰もが知っていますか
ありがとう