Sequenceを対応してみました
taediumさんより、多くのアドバイスをもらっております。とても感謝しています。
1つ1つ、対応していきます。
まずはEntityを作ります。
@Entity public class SPrivilege { /** userIdプロパティ */ @Id @Column(length = 5, nullable = false, unique = false) public String userId; /** ppIdプロパティ */ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(precision = 5, nullable = false, unique = true ) public Integer menuId; /** authorityプロパティ */ @Column(length = 1, nullable = true, unique = false) public String authority; /** versionプロパティ */ @Version @Column(precision = 8, nullable = true, unique = false) public Integer version; /** registDateプロパティ */ @Temporal(TemporalType.DATE) @Column(nullable = true, unique = false) public Date registDate; /** changeDateプロパティ */ @Temporal(TemporalType.DATE) @Column(nullable = true, unique = false) public Date changeDate; /** deleteDateプロパティ */ @Temporal(TemporalType.DATE) @Column(nullable = true, unique = false) public Date deleteDate; }
実行します。結果、テーブル・ユニーク(今回はユニークをTrueにしています)・ダンプ・シーケンス、全てDDLが作成されました。この作成されたDDLをOracleに反映します。
私は「SPrivilege」クラスしか作成していません。「SPrivilegeNames」は自動で作成されております。
つまり、Namesクラスは使用しなくても、問題なく、Entityだけが必要なのです(Entityパッケージを見ますと、EntityとNames両方があるので、両方作成しない、と思うかもしれないので)。
では、Sequenceの初期値・増分値を設定します。
既に作成していますクラスを使用します。
@Entity
public class SCompany {
/** comIdプロパティ */
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@SequenceGenerator(initialValue = 1, allocationSize = 2, name = "S_COMPANY_COM_ID")
@Column(precision = 5, nullable = false, unique = true)
public Integer comId;
}
@SequenceGenerator(initialValue = 1, allocationSize = 2, name = "S_COMPANY_COM_ID")
この設定をしていなかった為、デフォルトの50が設定されていました(ちなみに、50という値は適当に付けた値ではなく、パフォーマンスを考慮し、作成されています)。
私の方では、滅多に使用されない処理ですので、「2」を設定し、実行してみます。
結果、シーケンスが作成されます。
create sequence S_COMPANY_COM_ID increment by 2 start with 1;
大丈夫です。
タスクに追加しても良い、という事でしたので、タスクにも追加してみます。
ほかは何もしないで、実行します。結果は大丈夫ですので、DDLを確認します。
先に実行した S_COMPANY_COM_ID シーケンスは値が変更されていませんでした。
つまり、個別とタスクの設定では、個別の設定の方が反映されるようです。
では、Entityを作成したクラスのDDLを見てみます。
create sequence S_PRIVILEGE_MENU_ID increment by 50 start with 1;
あれ?
変わっていないです。こちらの環境では2つのスキーマーに対応している為、もう1つの対応が必要かもしれないです。
こちらにも対応を増やします。だめでした。。。
Entityのアノテーションかもしれないです。
/** ppIdプロパティ */
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(precision = 5, nullable = false, unique = true )
public Integer menuId;
現在はこのようになっていますので、
@GeneratedValue
のみにします。結果はだめでした。。。
では、sequenceをautoに変更してみます。結果は同じでした。
では、strategy = GenerationType.AUTOが入っています@GeneratedValueを全て
@GeneratedValue に変更してみます。結果は同じでした。
先に「個別とタスクの設定では、個別の設定の方が反映されるようです」と書きましたが、現段階では、結論にはならないですね。
個別に設定する事で確認はできましたので、先に進めていきます。