sequenceのデフォルトは50です
ん?
デフォルトでは以下の設定はS2JDBC-Genには入っておりません。
が、私は設定していました。理由は、テーブルが当たり前のように変更されるからです。
「override = "true"」
overwriteはデフォルトは「false」ですので、AntのXMLに何も記述をしなければ、上書きはされないです
(本家サイト参照)。一般的なプロジェクトでは「false」ですよね。
そして、S2JDBC-Genが生成したDDLを手動にて実行する、という流れだと思います。
今回は、デフォルトに戻します。
「override = "false"」
サブのテーブルの2つでは、IDは自動生成したいので、自動生成の設定を行います。
public class SCompany {
/** comIdプロパティ */
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(precision = 5, nullable = false, unique = true)
public Integer comId;
}
public class SDivision {
/** ppIdプロパティ */
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(precision = 5, nullable = false, unique = true)
public Integer ppId;
}
特に指定しなければいけないテーブル等はありませんので、「AUTO」を設定しています。
ここでAntを実行します。
そして、Migrateディレクトリーを見てみましょう!Sequenceが作成されていますね。
本家サイトを見ますと、作成後のDDLが格納されるフォルダ名は任意で設定できます
(先に行きたいので、変更ができる事を頭の中にインプットしておきます)。
<SCompany>
create sequence S_COMPANY_COM_ID increment by 50 start with 1;
<SDivision>
create sequence S_DIVISION_PP_ID increment by 50 start with 1;
あれ???
「50」ですね?「1」かと思いました。うーん、今はとりあえずこのまま進みます。
本家サイトをチェックしましたが、Entityのカラムの設定ではなさそうです。
「GeneratedValue」にIncrementの値が設定できるとうれしいですね。
作成されたDDLを実行しないとエラーになるので、手動で実行します。
今度はメインのEntityにサブのオブジェクトを設定します。
public class SUser {
/** userIdプロパティ */
@Id
@Column(length = 5, nullable = false, unique = false)
public String userId;
/** passプロパティ */
@Column(length = 5, nullable = false, unique = false)
public String pass;
/** custNameプロパティ */
@Column(length = 30, nullable = true, unique = false)
public String custName;
/** custNameKanaプロパティ */
@Column(length = 45, nullable = true, unique = false)
public String custNameKana;
/** comIdプロパティ */
@Id
@Column(precision = 5, nullable = false, unique = false)
public Integer comId;
@ReferentialConstraint(enable = false)
@ManyToOne
@JoinColumns(@JoinColumn(name = "COM_ID", referencedColumnName = "COM_ID"))
public SCompany scompany;
/** ppIdプロパティ */
@Column(precision = 5, nullable = true, unique = false)
public Integer ppId;
@ReferentialConstraint(enable = false)
@ManyToOne
@JoinColumns(@JoinColumn(name = "PP_ID", referencedColumnName = "PP_ID"))
public SDivision sdivision;
/** contactAddプロパティ */
@Column(length = 30, nullable = true, unique = false)
public String contactAdd;
/** mailプロパティ */
@Column(length = 100, nullable = true, unique = false)
public String mail;
/** 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;
}
今回は外部キーは使用しない方針がプロジェクトでは決まっています。
よって、外部キーを参照しないようにします。
@ReferentialConstraint(enable = false)
上記の設定を行う事で、外部キーがDDLには生成されなくなります。
多VS1の設定は以下のように行い、結合するテーブルのキー項目を書きます。
キー項目を書く時、Entityの属性名ではなく、テーブル名になります。
@ManyToOne
@JoinColumns(@JoinColumn(name = "COM_ID", referencedColumnName = "COM_ID"))
public SCompany scompany;
同様に以下のメイン・サブのテーブルも記述します。
@ReferentialConstraint(enable = false)
@ManyToOne
@JoinColumns(@JoinColumn(name = "PP_ID", referencedColumnName = "PP_ID"))
public SDivision sdivision;
Antを実行します。そして、DDLを参照しますと、外部キーが設定されていない事を
確認する事ができると思います。これで、テストプログラム作成前の準備が完了です。