2013-06-11 9 views
5

Ich muss 2 verschiedene IDs in der gleichen Tabelle auf Einfügen einfügen und ich versuche, selectKey zu verwenden, um Werte aus Oracle-Sequenz zum Auffüllen der IDs zu ziehen.Ist es in ibatis möglich, mehr als eine selectKey-Klausel in derselben Einfügeabfrage zu haben?

Mit einer ID und SelectKey habe ich keine Probleme, aber wenn ich den zweiten SelectKey hinzufüge, scheint der Wert nicht zu füllen (siehe Zeilengruppe unten).

Ist es möglich, dies zu tun? Oder muss ich eine andere Abfrage erstellen, um die zweite ID zu aktualisieren?

Dank

<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> 

Antwort

3

Es kann nur einen geben!

Irgendwann habe ich entdeckt, dass es nur eine Strophe in einer ibatis-Einfügestanza geben kann.

jedoch den zweiten Schlüssel konnte ich wie folgt aktualisieren (ich glaube, das ist Orakel spezifisch):

<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 ist der Oracle-Sequenznamen, die ich zuvor definiert sind.

+0

Ich mag es nicht, meinen eigenen Deal zu beantworten, aber fand schließlich die Antwort woanders. Hoffentlich hilft das in Zukunft jemandem anderen. –

+0

Ich benutze MS SQL, ich habe eine ähnliche Anforderung. Anstatt hier ** MY_SECOND_ID ** aus der Sequenz zu holen, muss ich von einer anderen Tabelle abholen. Ist es möglich, Select-Abfrage statt Sequenz zu verwenden? –

+1

Es ist eine Weile her, seit ich MS SQL verwendet habe, aber möglicherweise (SELECT ID FROM yourQuery), anstelle der MY_SECOND_ID_SEQUENCE.nextval,? –

Verwandte Themen