HSQLDB を組み込みデータベースとして使用したいのですが、自動インクリメントに問題があります。
私が理解している限り[CALL] IDENTITY()
、最後の主キー値を取得するために使用できます。ただし、iBatis と HSQLDB の両方を使用した実験では、DatabaseManagerSwing
常に 0 の値が返されます。
自動インクリメントを HSQLDB で動作させるにはどうすればよいですか?
編集:
テーブルの自動生成にDDLUtilsを使用しているとは言いませんでした。以下はHSQLDB に適していません。
<?xml version="1.0"?>
<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd">
<database name="testdb">
<table name="users">
<!-- using autoincrement attribute below causes
"primary key already exists" exception -->
<column name="id" type="INTEGER" primaryKey="true" />
<column name="username" type="VARCHAR" size="30" />
<column name="password" type="VARCHAR" size="100" />
</table>
</database>
また、ドメイン クラスに使用される iBatis SQL マップは次のとおりです。
<insert id="insertUser" parameterClass="user">
<selectKey keyProperty="id" resultClass="int">
CALL IDENTITY()
</selectKey>
INSERT INTO USERS
( USERNAME, PASSWORD )
VALUES
( #username#, #password#)
</insert>