[Seasar-user:12326] Re: [Seasar][S2JDBC]GenerationType.SEQUENCEによるIDの取得

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 12月 27日 (木) 16:30:11 JST


小林 (koichik) です.

Date:    Thu, 27 Dec 2007 16:13:23 +0900
From:    sato <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:12325] [Seasar][S2JDBC]GenerationType.SEQUENCEによるIDの取得

> S2JDBCを利用したinsertで1件目はIDを{Entity}.nextval from dualでデータ
> ベースから取得出来ているのですが、2件目以降はnextvalせず、IDの最大値+1で
> データを登録してしまいます。
> これにより、データベースのSequenceと登録されているIDに不整合が起きていま
> す。

@SequenceGenerator アノテーションには
allocationSize という要素があり,その
デフォルト値は 50 となっています.
# JPA の仕様です.

S2JDBC は,Sequence から取得した値から,
この allocationSize の範囲までは,新たに
Sequence から値を取得することなく主キーに
割り当てます.

そのため,Sequence の増分値と allocationSize が
一致している必要があります.
Sequence の増分値は create sequence 文で指定します.

CREATE SEQUENCE DEPARTMENT_SEQ INCREMENT BY 50 START WITH 5;
                                            ^^
この増分値と allocationSize が一致していれば,
毎回 nextval を取得するより効率的です.

どうしても毎回 nextval を取得させたいなら,
@SequenceGenerator で allocationSize を 1 に
してください.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>



Seasar-user メーリングリストの案内