0

私は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属性を必要としません。idname、および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

4

1 に答える 1

0

念のため、フィールドの値を返すgetId()メソッドをクラスに含めましたか?ClassAid

于 2014-10-23T12:22:24.307 に答える