我需要在insert上的同一个表中填充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>
答案 0 :(得分: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序列名称。
答案 1 :(得分:0)
不确定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>