Oracle データベースにシーケンス オブジェクトがあります。
create sequence BASE_SEQ
minvalue 1
maxvalue 9999999999999999999999999999
start with 100
increment by 1
nocache;
Web アプリケーションに jpa(toplink) を使用しています。すべての db オブジェクトの基本クラスがあります。
@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 が (予想される 100 ではなく) 51 で始まることがわかります。
その後、データベースに移動し、シーケンス オブジェクトの 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