7

我需要在插入时在同一个表中填充 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>
4

2 回答 2

3

只可以有一个人!

最终我发现在 ibatis 插入节中只能有一个节。

但是我能够按如下方式更新第二个密钥(我相信这是特定于 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序列名。

于 2013-06-12T14:47:37.980 回答
1

不确定 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>
于 2019-11-28T11:26:22.907 回答