INSERT時にIDを自動採番する
IDを自動採番するには、selectKey要素をつかいます。keyPropertyを指定しておくと、parameterClassで指定したオブジェクトのIDに採番した値を自動設定してくれます。
シーケンスを使う場合
type="pre"に設定します。シーケンスオブジェクトを使って自動採番した後、Insert文にIDを設定してくれる(はず)。
<insert id="insertClass" parameterClass="TestClass"> <selectKey keyProperty="classId" resultClass="int" type="pre" > SELECT NEXTVAL('classid_seq') </selectKey> INSERT INTO Test_Class ( Rec_No, Cls_Name, Cls_Note ) VALUES ( #classId#, #className#, #classNote# ) </insert>
MySQLのAuto Increment使う場合
type="post"に設定します。postにしておかないと、Insert文実行前(Auto Incrementによる採番前)に「SELECT LAST_INSERT_ID() 」が実行されて、IDが取得できないようです。
(EntityのIdを標準出力してみると、0が出力)
<insert id="insertClass" parameterClass="TestClass"> <selectKey keyProperty="classId" resultClass="int" type="post" > SELECT LAST_INSERT_ID() AS GEN_Id </selectKey> INSERT INTO Test_Class ( Rec_No, Cls_Name, Cls_Note ) VALUES ( NULL, #className#, #classNote# ) </insert>
Javaのソースコードの例。entityには自動採番したIDが設定されています。
public void insert(BookSummary entity) { super.getSqlMapClientTemplate().insert("insertClass", entity); }