2013-06-11 10 views
5

挿入時に同じテーブルに2つの異なるIDを設定する必要があり、selectKeyを使用してOracleシーケンスから値を取得してIDを設定しようとしています。ibatisでは、同じinsertクエリで複数のselectKey句を使用できますか?

1つのidとselectKeyでは問題はありませんが、2番目のselectKeyを追加すると、値が入力されていないように見えます(下記のinsert stanzaを参照)。

これは可能ですか?または、2番目のIDを更新する別のクエリを作成する必要がありますか?

おかげ

<insert id="create" parameterClass="MyObject"> 
<selectKey keyProperty="id" resultClass="long" type="pre"> 
    <include refid="sequences.myObjectId" /> 
</selectKey> 
<selectKey keyProperty="mySecondId" resultClass="long" type="pre"> 
    <include refid="sequences.mySecondId" /> 
</selectKey>  
INSERT INTO MY_OBJECT_TABLE 
(
MY_OBJECT_ID, 
MY_SECOND_ID, 
... 
) 
VALUES 
) 
#id#, 
#mySecondId#, 
... 
) 
</insert> 

答えて

3

ONLY ONE THEREすることができます!

最終的に私はibatis挿入スタンザに1つのスタンザしか存在しないことを発見しました。

しかし、私は(私はこれは、特定のOracleであると信じて)次のように、第2の鍵を更新することができました:

<insert id="create" parameterClass="MyObject"> 
<selectKey keyProperty="id" resultClass="long" type="pre"> 
    <include refid="sequences.myObjectId" /> 
</selectKey> 
INSERT INTO MY_OBJECT_TABLE 
(
MY_OBJECT_ID, 
MY_SECOND_ID, 
... 
) 
VALUES 
) 
#id#, 
MY_SECOND_ID_SEQUENCE.nextval, 
... 
) 
</insert> 

MY_SECOND_ID_SEQUENCEは、私が以前に定義されたOracleシーケンスの名前です。

+0

私は自分の契約に答えるのが好きではありませんが、結局答えはどこかで見つけました。うまくいけば、これは将来誰かを助けるでしょう。 –

+0

私はMS SQLを使用していますが、同様の要件があります。ここでシーケンスから** MY_SECOND_ID **を取得する代わりに、別のテーブルからフェッチする必要があります。シーケンスの代わりに選択クエリを使用することは可能ですか? –

+1

私はMS SQLを使用してからしばらくしていますが、おそらく (SELECT ID FROM yourQuery)をMY_SECOND_ID_SEQUENCE.nextvalの代わりに追加していますか? –

関連する問題