首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ibatis中,同一个insert查询中是否可以有多个selectKey子句?

在ibatis中,同一个insert查询中是否可以有多个selectKey子句?
EN

Stack Overflow用户
提问于 2013-06-11 22:24:03
回答 2查看 4.3K关注 0票数 7

我需要在插入时在同一个表中填充两个不同的in,我正在尝试使用selectKey从Oracle序列中提取值来填充in。

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

有可能做到这一点吗?或者我需要创建另一个查询来更新第二个id?

谢谢

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-12 22:47:38

只能有一个!

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

然而,我能够更新第二个密钥,如下所示(我相信这是oracle特有的):

代码语言:javascript
复制
<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序列名。

票数 3
EN

Stack Overflow用户

发布于 2019-11-28 19:26:23

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

代码语言:javascript
复制
 <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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17046520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档