【问题标题】:Is it possible in ibatis to have more than one selectKey clause in the same insert query?在 ibatis 中是否可以在同一个插入查询中有多个 selectKey 子句?
【发布时间】:2023-03-10 08:54:01
【问题描述】:

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

【问题讨论】:

    标签: java oracle ibatis


    【解决方案1】:

    只有一个!

    最后我发现,一个 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序列名。

    【讨论】:

    • 我不喜欢自己回答,但最终还是在别处找到了答案。希望这会在未来对其他人有所帮助。
    • 我正在使用 MS SQL,我有类似的要求。现在这里不是从序列中获取 MY_SECOND_ID,而是需要从其他表中获取。是否可以使用选择查询而不是序列?
    • 我使用 MS SQL 已经有一段时间了,但可能会添加 (SELECT ID FROM yourQuery) 来代替 MY_SECOND_ID_SEQUENCE.nextval, ?
    【解决方案2】:

    不确定 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2016-12-02
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      相关资源
      最近更新 更多