私はiBatisを初めて使用します。私のプロジェクトでは、iBatis を使用して Java オブジェクトを Oracle DB に保持しています。ID、名前、説明の 3 つの列を持つクラス ClassA があります。データは TableA に永続化されます。DB には、このテーブルの id 列の値を生成するシーケンスがあります。次のように、このテーブルに挿入ステートメントを書きました。
<insert id="insertTableA" parameterClass="com.ClassA">
<selectKey resultClass="java.lang.Long" keyProperty="id">
SELECT seq_TableA.nextval as id FROM dual
</selectKey>
INSERT INTO TableA(ID, NAME, DESCRIPTION) VALUES (#id#, #name#, #description#)
</insert>
これはうまくいきました。
しかし、社内の UI フレームワークの制限により、一部のデザインを変更する必要がありました。したがって、最初にシーケンスから id long を生成し、その値を名前と説明とともに ClassA のインスタンスに設定してから、DB に挿入する必要があります。その場合、insert ステートメントはselectKey属性を必要としません。id、name、およびdescription の値はオブジェクトにあります。以下のようにクエリを更新すると、Null Pointer Exceptionがスローされます。
<insert id="insertTableA" parameterClass="com.ClassA">
INSERT INTO TableA(ID, NAME, DESCRIPTION) VALUES (#id#, #name#, #description#)
</insert>
を使用せずにテーブルにデータを挿入する方法。最初にシーケンスからキーを生成し、id を含むすべての値をオブジェクトに入力し、次のように Java からステートメントを呼び出そうとします。
getSqlTemplate().insert("process.insertTableA", instanceClassA);
どんなポインタでも大歓迎です、
ありがとう、SD