プライマリキーをInterstage永続性プロバイダで管理する機能です。プライマリキーが未設定の新規Entityに対し永続化操作(EntityManagerのpersistメソッド)を実行すると、永続性プロバイダがDBMSと連携し、自動的にEntityへプライマリキーを割り当てます。本機能を使用する場合は、必ず同時にデータベーステーブル自動生成機能も使用してください。
Interstage永続性プロバイダは、JPA規約で規定された以下の生成パターンを提供しますが、サポートされている生成パターンはDBMSに依存します。
生成パターン | プライマリキー値の生成方針 |
---|---|
AUTO | 永続性プロバイダが適切な生成方針を選択します。 |
TABLE | プライマリキー値生成用のテーブルを利用します。 |
SEQUENCE | データベースのシーケンス機能を利用します。 |
IDENTITY | データベースのIDENTITYカラムを利用します。 |
選択される方針と定義の省略値について以下に説明します。
以下は、アノテーションで定義する場合について記述しています。deployment descriptor (orm.xml)に指定する場合、アノテーション定義をそのアノテーションと相当するdeployment descriptor (orm.xml)のタグの定義として読んでください。
@GeneratedValueを定義すると属性の省略値は、以下のとおりになります。
strategyの定義値 | 使用するDBMS | 選択される方針 |
---|---|---|
AUTO | Symfoware | generatorの値を省略した場合、Generatorの名前はSEQ_GENとなります。このGeneratorが定義されていない場合、属性の省略値を使用するTableGeneratorが使用されます。 |
SQL Server | generatorの値を省略した場合、Generatorの名前はSEQ_GENとなります。このGeneratorがSequenceGeneratorの場合、IDENTITYカラムが利用されます。このGeneratorが定義されていない場合、属性の省略値を使用するTableGeneratorが使用されます。 | |
TABLE | すべて | generatorを省略した場合、TableGeneratorが使用されます。TableGeneratorの名前はSEQ_GEN_TABLEとなります。このGeneratorを定義していない場合、属性の省略値を使用するTableGeneratorが使用されます。 |
SEQUENCE | Symfoware | SequenceGeneratorが使用されます。 |
SQL Server | IDENTITYカラムが使用されます。 |
@SequenceGeneratorのsequenceName属性の省略値は@SequenceGeneratorのnameと同じ値です。
@TableGeneratorの属性の省略値は、以下のとおりです。
属性名 | 省略値 |
---|---|
table | SEQUENCE |
pkColumnName | SEQ_NAME |
pkColumnValue | @TableGeneratorのnameと同じ値 |
valueColumnName | SEQ_COUNT |
注意
プライマリキー値の自動生成機能に関する注意事項
TableGeneratorの名前に、省略値の「SEQ_GEN_TABLE」を指定することはできません。
SequenceGeneratorの名前に、省略値の「SEQ_GEN_SEQUENCE」を指定することはできません。
Generatorの名前は、Generatorの種類を問わず一意の値を指定してください。
その他のDBMS固有の注意事項は、「1.3.8 JPA機能における注意事項」を参照してください。
テーブル自動生成機能により作成されたプライマリキー値用のテーブルは、複数のアプリケーションから参照される可能性があるため、配備解除時に破棄されません。必要に応じて手動で削除してください。