私はHibernate 4とOracle 11gを使用しています。 DBにオブジェクトをマッピングするための、そのようなコードを有する:HibernateとOracle overstateシーケンスのインクリメント
@Entity
@Table(name = "APPLICATION", schema = "PRODUCTION")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Application")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Application {
@Id
@ComparatorIgnore
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRODUCTION.SEQUENCE_NEW")
@SequenceGenerator(name = "PRODUCTION.SEQUENCE_NEW", schema = "PRODUCTION", sequenceName = "PRODUCTION.SEQUENCE_NEW", allocationSize = 1)
@Column(name = "ID")
@XmlTransient
@Getter @Setter private Long id;
Iは、(いくつかの時間後)IDのような配列を取得し、それは奇妙なギャップをさらに値を生成し続ける。
956493
955431
956174
955995
950593
950720
952045
950998
951905
950860
949323
950058
949084
948981
948884
948786
950182
950345
949952
950469
私はより安定して平坦な成長を得ると考えました。私はマルチスレッドアプリケーションを持っていると考えて、この予期しない動作を修正する方法を知りました。 これは順序が定義されている方法です。
CREATED 27.02.17
LAST_DDL_TIME 27.02.17
SEQUENCE_OWNER PRODUCTION
SEQUENCE_NAME SEQUENCE_NEW
MIN_VALUE 1
MAX_VALUE 9999999999999999999999999999
INCREMENT_BY 1
CYCLE_FLAG N
ORDER_FLAG N
CACHE_SIZE 20
LAST_NUMBER 957101
PARTITION_COUNT
SESSION_FLAG N
KEEP_VALUE N
私は何を逃したのですか? 事前に感謝します。いずれの答えも高く評価されます。
@ john16384の回答とこの文書[リンク](https://docs.oracle.com/cd/B28359_01/server.111/b28310/views002.htm#sthref2219)によると、「データベースはそのシーケンスを再びインクリメントする前に、シーケンスをインクリメントしたトランザクションが完了するのを待つ」。今はかなり明確です、あなたの配慮に感謝します。 –
なぜ 'max_value'が' 9999999999999999999999999999'ですか? –