在ibatis中,是否可能在同一个插入查询中有多个selectKey子句?



我需要在插入的同一表中填充2个不同的id,我试图使用selectKey从Oracle序列中拉值来填充id。

有一个id和selectKey我没有问题,但当我添加第二个selectKey值似乎没有填充(见下面的插入节)。

这是可能的吗?还是需要创建另一个查询来更新第二个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>

只能有一个!

最后我发现在ibatis insert节中只能有一个节。

然而,我能够更新第二个键如下(我相信这是oracle特定的):

<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序列名称。

不确定IBatis,但在MyBatis中,我们肯定可以这样做:

 <insert id="some_id">
        <selectKey keyProperty="key1,key2" keyColumn="key_1,key_2" order="BEFORE" resultType="java.util.Map">
            SELECT seq_nextval('seq') as key_1, seq_nextval('seq') as key_2 from dual
        </selectKey>
        INSERT INTO table_name (column1, column2) 
        VALUES (#{key1},#{key2})
 </insert>

最新更新